用栈和队列实现迷宫求解

用栈实现,深度搜索

#include

#include
#include 
using namespace std;
struct node{
    int x,y,d;//横纵坐标和方向 
};
stacks;
int path(int map[10][10],int move[8][2]){
    node temp;
    int x,y,d,i,j;
    temp.x=1;temp.y=1;temp.d=-1; //入口点
    s.push(temp);
    while(!s.empty()){
          temp=s.top();
          s.pop();
          x=temp.x;  y=temp.y; d=temp.d+1;
          while(d<8){
               i=x+move[d][0]; j=y+move[d][1];
               if(map[i][j]==0){
                    temp.x=x;temp.y=y;temp.d=d;
                    s.push(temp);
                    x=i;y=j;
                    map[x][y]=-1;
                    if(i==8 && j==8)
                        return 1;
                    else 
                        d=0;                               
               }
               else 
                   d++;
          }                                
    } 
   return 0;   
}
void output(int map[10][10]){
    for(int i=0;i<10;i++) {
       for(int j=0;j<10;j++)    
          cout<       cout<      }
}
int main(){
    //////////////////////// 
    int map[10][10];
    memset(map,0,sizeof(map));
    for(int i=0;i<10;i++){
        for(int j=0;j<10;j++){
             if(j==0 || j==9 || i==0 ||i==9)
                 map[i][j]=1;
             else 
                map[i][j]=0;
        }
    }
    map[1][3]=map[1][7]=map[2][3]=map[2][7]=1;
    map[3][5]=map[3][6]=1;
    map[4][2]=map[4][3]=map[4][4]=1;
    map[5][4]=1;
    map[6][2]=map[6][6]=1;
    map[7][2]=map[7][3]=map[7][4]=map[7][6]=map[7][7]=1;
    map[8][1]=1;
    map[1][1]=0;//入口 
    map[8][8]=0;//出口 
    int move[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}}; //8个方向 
    cout<<"地图如下:"<     output(map); 
    system("pause");
    path(map,move);
    cout<<"路径如下:"<     node t;
    while(!s.empty()){
         t=s.top();
         s.pop();
         cout<<"("<     }
    cout< system("pause");
return 0;
}

用队列实现,广度搜索,找出的是最短路径

#include
#include
#include 
using namespace std;
struct node{
    int x,y;//横纵坐标
};
int path(int map[10][10],int move[8][2]){
     queueq;
     int x,y;
     node temp;
     temp.x=1;temp.y=1;
     q.push(temp);
     map[1][1]=8;  //搜索过的不能再搜
     while(!q.empty()){
          temp=q.front();                  
          q.pop();
          for(int i=0;i<8;i++){
              x=temp.x+move[i][0];
              y=temp.y+move[i][1];
              if(map[x][y]==0){
                  temp.x=x;
                  temp.y=y;
                  q.push(temp);
                  map[x][y]=8;
              }
              if(map[8][8]==8)  //搜索过出口点说明已找到出口 
                   return 1; 
          } 
     } 
     return 0;  
}
void output(int map[10][10]){
    for(int i=0;i<10;i++) {
       for(int j=0;j<10;j++)    
          cout<       cout<      }
}
int main(){
    //////////////////////// 
    int map[10][10];
    memset(map,0,sizeof(map));
    for(int i=0;i<10;i++){
        for(int j=0;j<10;j++){
             if(j==0 || j==9 || i==0 ||i==9)
                 map[i][j]=1;
             else 
                map[i][j]=0;
        }
    }
    map[1][3]=map[1][7]=map[2][3]=map[2][7]=1;
    map[3][5]=map[3][6]=1;
    map[4][2]=map[4][3]=map[4][4]=1;
    map[5][4]=1;
    map[6][2]=map[6][6]=1;
    map[7][2]=map[7][3]=map[7][4]=map[7][6]=map[7][7]=1;
    map[8][1]=1;
    map[1][1]=0;//入口 
    map[8][8]=0;//出口 
    int move[8][2]={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}}; //8个方向 
    cout<<"地图如下:"<     output(map); 
    system("pause");
    if(path(map,move))
        cout<<"已找到出口"<     else 
        cout<<"靠,没出口"<     cout<<"尝试如下:"<     output(map);
system("pause");
return 0;
}







你可能感兴趣的:(DFS,and,BFS)