关于文件的输入输出,只要在主函数中添加:

freopen("E:\\read9.txt","r",stdin);
freopen("E:\\write9.txt","w",stdout);

即可。

其余地方的输入输出不变,但是必须用scanf和printf进行输入输出。

实验一  迷宫问题(bfs)

  1 #include"iostream"
  2 #include"stdio.h"
  3 #include"algorithm"
  4 #include"queue"
  5 #include"string.h"
  6 #include"cmath"
  7 #include"stack"
  8 #include"fstream"
  9 #define mx 105
 10 #define inf 1000
 11 using namespace std;
 12 int n,m;
 13 int sx,sy,ex,ey;
 14 int  maze[mx][mx],vis[mx][mx];
 15 int dir[8][2]= {{0,1},{0,-1},{1,0},{-1,0},{-1,-1},{-1,1},{1,-1},{1,1}};
 16 bool judge(int x,int y)
 17 {
 18     if(maze[x][y]==0&&x>=0&&x<n&&y>=0&&y<m)
 19     {
 20         return true;
 21     }
 22     return false;
 23 }
 24 void output(int step)
 25 {        
 26     int i;
 27     stack<int>path;
 28     path.push(ex*m+ey);
 29     printf("%s%d\n","最少步骤是:",step);
 30     int x=ex,y=ey,dx,dy;
 31     while(vis[x][y]!=0)
 32     {
 33         for(i=0;i<8;i++)
 34         {
 35             dx=x+dir[i][0];
 36             dy=y+dir[i][1];
 37             if(dx>=0&&dx<n&&dy>=0&&dy<m)
 38             if(vis[dx][dy]==vis[x][y]-1)
 39             {
 40                 path.push(dx*m+dy);
 41                 break;
 42             }
 43         }
 44         x=dx;y=dy;
 45     }
 46     printf("%s","最短路径为:");
 47     while(!path.empty())
 48      {
 49          int u=path.top();
 50          path.pop();
 51          x=u/m;y=u%m;
 52          if(x!=ex||y!=ey)
 53         printf("%s%d%s%d%s%s","(",x,",",y,")","->");
 54          else printf("%s%d%s%d%s\n\n","(",x,",",y,")");
 55      }
 56 
 57 }
 58 void bfs(int step)
 59 {
 60     queue<int>q;
 61     int i,x,y,dx,dy,u;
 62     x=sx;y=sy;
 63     u=x*m+y;
 64     q.push(u);
 65     while(!q.empty())
 66     {
 67         u=q.front();
 68         q.pop();
 69         x=u/m;y=u%m;
 70         if(x==ex&&y==ey)
 71         {
 72             output(step);
 73             return;
 74         }
 75         int flag=1;
 76         step=vis[x][y];
 77         for(i=0;i<8;i++)
 78         {
 79             dx=x+dir[i][0];
 80             dy=y+dir[i][1];
 81             if(judge(dx,dy))
 82             {
 83                    if(flag){step++;flag=0;}
 84                     maze[dx][dy]=1;
 85                     if(step<vis[dx][dy])
 86                     vis[dx][dy]=step;
 87                     u=dx*m+dy;
 88                     q.push(u);
 89 
 90             }
 91         }
 92     }
 93     printf("%s","没有满足条件的通路!\n");
 94 }
 95 int main()
 96 {
 97     int i,j;
 98     freopen("C://read.txt","r",stdin);
 99     freopen("C://write.txt","w",stdout);
100     while(scanf("%d%d",&n,&m),n||m)
101     {
102         for(i=0;i<n;i++)
103         {
104             for(j=0;j<m;j++)
105                 {scanf("%d",&maze[i][j]);vis[i][j]=inf;}
106         }
107         scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
108         maze[sx][sy]=1;
109         vis[sx][sy]=0;
110         bfs(0);
111     }
112     return 0;
113 }
View Code

相关文章:

  • 2021-09-09
  • 2021-08-12
  • 2021-04-21
猜你喜欢
  • 2022-01-24
  • 2022-12-23
  • 2022-12-23
  • 2021-05-19
  • 2021-08-04
  • 2021-06-13
  • 2021-11-11
相关资源
相似解决方案