中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

迷宮第一階段  

發布時間:2020-07-15 20:57:38 來源:網絡 閱讀:229 作者:wzdouban 欄目:編程語言
/*****************************************************
                   WZ ASUST 2016
迷宮問題的兩種記錄形式
                 1:test11隊列  需要記錄后出隊列
                 2:test22棧實現 不需要彈出所記錄的坐標(僅無支路時)
  第二種  不通過在循環中修改值的方法來展現路徑(但還是得先修改為1)
   可以在最后  彈出元素并修改所經過的值為其他標識
在寫文檔中發現 有支路時,就得寫彈出部分的代碼  彈出無解的坐標
****************************************************/
#include<iomanip>//操縱運算子 setw(2)
// 內部矩陣大小 6*8  加邊框后是8*10
#define N   20
typedef int  elem_type;  
class Stack
{
public:
 Stack()
 {
  top = 0;
  size = N;
  data = new elem_type[size];
 }
 ~Stack()
 {
  top = 0;
  delete []data;
  data = NULL;
 }
 
 void IncSize()
 {
  size = 2*size;
  elem_type *p = new elem_type[size];
  memcpy(p,data,sizeof(elem_type)*top);
  delete []data;
  data = p;
 }
 bool push(elem_type value)
 {
  if(isfull())
  {
   IncSize();
  }
  data[top++] = value;
  return true;
 }
   
 int gettop()//得到棧頂元素
 {
  return data[--top];          
 }
 
 bool isfull()//判斷是否已滿
 {
  return top == size;
 }
    private:
 elem_type* data;
 int top;
 int size;
};
const int ExitX=6;
const int ExitY=8;
using namespace std;
typedef struct QNode
{
 int x,y;
 struct QNode *next;
}QNode,Queueptr;
typedef struct
{
 Queueptr *front;
 Queueptr *rear;
}LinkQueue;
//初始化隊列
int InitQueue(LinkQueue &Q)
{  
 Q.front=Q.rear=(Queueptr*)malloc(sizeof(QNode));
 if(!Q.front) return 0;
 Q.front->next=NULL;
 return 1;
}
 //坐標x,y 入隊
int EnQueue(LinkQueue &Q,int x,int y)
{
 Queueptr *p;
 p=(Queueptr*)malloc(sizeof(QNode));
 if(!p) return 0;
 p->x=x; p->y=y; p->next=NULL;
 Q.rear->next=p;
 Q.rear=p;
 return 1;
}
//坐標x,y 出隊
int DeQueue(LinkQueue &Q,int *x,int *y)
{
 Queueptr *p;
 p=Q.front->next;
 *x=p->x; *y=p->y; Q.front->next=p->next;
 if(Q.rear==p) Q.rear=Q.front;
 free(p);
 return 1;
}
int GetHead_x(LinkQueue Q,int *x)
{
 *x=Q.front->next->x;
 return *x;
}
int GetHead_y(LinkQueue Q,int *y)
{
 *y=Q.front->next->y;
 return *y;
}
int MAZE[8][10]={ 1,1,1,1,1,1,1,1,1,1,
                  1,0,0,0,1,1,1,1,1,1,
      1,1,1,0,1,1,0,0,1,1,
      1,1,1,0,1,1,0,0,1,1,
      1,1,1,0,0,0,0,1,1,1,
      1,1,1,1,1,1,0,1,1,1,
      1,1,1,0,0,0,0,0,0,1,
      1,1,1,1,1,1,1,1,1,1};
//  檢查是否走到出口
int chkExit(int x,int y,int ex,int ey)
{
 if(x==ex && y==ey) return 1;
 else return 0;
}
int test11(){
 int i,j;
 int x=1;    //入口
 int y=1;    //入口
 for(i=0;i<8;i++)
{
  for(j=0;j<10;j++)
   cout<<setw(2)<<MAZE[i][j]<<" ";
  cout<<endl;
 }
 LinkQueue Q;
 InitQueue(Q);
 MAZE[x][y]=1; //入口標記為1
 EnQueue(Q,x,y); //
 while(1)
{
  x=GetHead_x(Q,&x);
  y=GetHead_y(Q,&y);
  if(chkExit(x,y,ExitX,ExitY)==1) break;
  else{
   if(MAZE[x-1][y]==0)
   {
    MAZE[x-1][y]=MAZE[x][y]+1;
    EnQueue(Q,(x-1),y);
   }
   if(MAZE[x+1][y]==0)
   {
    MAZE[x+1][y]=MAZE[x][y]+1;
    EnQueue(Q,(x+1),y);
   }
   if(MAZE[x][y-1]==0)
   {
    MAZE[x][y-1]=MAZE[x][y]+1;
    EnQueue(Q,x,(y-1));
   }
   if(MAZE[x][y+1]==0)
   {
    MAZE[x][y+1]=MAZE[x][y]+1;
    EnQueue(Q,x,(y+1));
   }
   else
   {
    DeQueue(Q,&x,&y);
   }
  }  
 }
 cout<<"[test11 所求最短路徑!]"<<endl;
 for(i=0;i<8;i++)
 {
    for(j=0;j<10;j++)
      cout<<setw(2)<<MAZE[i][j]<<" ";
    cout<<endl;
 }
 
 return 0;
}
int test22()
{
 int i,j;
 int x=1;    //入口
 int y=1;    //入口
 for(i=0;i<8;i++)
{
  for(j=0;j<10;j++)
   cout<<setw(2)<<MAZE[i][j]<<" ";
  cout<<endl;
 }
Stack s;//建立一個棧  
MAZE[x][y]=1; //入口標記為1
 s.push(x); s.push(y);
 MAZE[x][y]=1; //入口標記為1
 s.push(x); s.push(y);
 while(1)
{
  y=s.gettop();
  x=s.gettop();
  if(chkExit(x,y,ExitX,ExitY)==1) break;
  else{
   if(MAZE[x-1][y]==0)
   {
    MAZE[x-1][y]=MAZE[x][y]+1;
s.push(x-1); s.push(y);
   }
   if(MAZE[x+1][y]==0)
   {
    MAZE[x+1][y]=MAZE[x][y]+1;
s.push(x+1); s.push(y);
   }
   if(MAZE[x][y-1]==0)
   {
    MAZE[x][y-1]=MAZE[x][y]+1;
s.push(x); s.push(y-1);
   }
   if(MAZE[x][y+1]==0)
   {
    MAZE[x][y+1]=MAZE[x][y]+1;
 s.push(x); s.push(y+1);
   }
   
  }  
 }
 cout<<"[ test22 所求最短路徑!]"<<endl;
 for(i=0;i<8;i++)
 {
    for(j=0;j<10;j++)
      cout<<setw(2)<<MAZE[i][j]<<" ";
    cout<<endl;
 }
 return 0;
}
void newMAZE1()
{
time_t t;
srand((unsigned)time(&t));
int k=0;
int r,l;
while(k<20)
  {
        r=rand()%8;
        l=rand()%10;
  if(MAZE[r][l]!=0)
  { MAZE[r][l]=0;k++;}
}
}
void newMAZE()
{
 int k=0;
while(k<8)
  {
     MAZE[k][1]=0;k++;
  }
 k=0;
while(k<10)
  {
     MAZE[6][k]=0;k++;
  }
}
int main()
{
test11();
cout<<endl;
newMAZE();
cout<<endl;
test22();
return 0;
}
//修bug中

棧實現基本都可以 走到支路 然后給支路置1  記錄一個棧長度 然后從新再來 得到新的棧 若短就更新棧  最后沒有路時就比較 是否有解 有解取最短棧就是最優解

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宣威市| 沛县| 普格县| 贵州省| 汉阴县| 崇明县| 宁阳县| 郴州市| 林口县| 克拉玛依市| 视频| 黑水县| 中山市| 周至县| 开封县| 新巴尔虎右旗| 师宗县| 肃宁县| 高青县| 兴城市| 资兴市| 容城县| 阿拉善盟| 惠来县| 始兴县| 澄城县| 滦平县| 娄烦县| 萝北县| 景德镇市| 涪陵区| 饶平县| 桂东县| 无棣县| 桦川县| 嘉善县| 左权县| 盘锦市| 荃湾区| 嘉禾县| 曲阳县|