关于文件的输入输出,只要在主函数中添加:
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 }