这是一道字符串模拟题,可以用来锻炼代码能力吧。
题意很简单给定一个5*5的迷宫,其中有一个空格,每次操作都是让空格进行移动,输出一系列操作之后的迷宫。
代码:
#include <iostream> #include <cstdio> #include <string.h> #include <map> #include <stack> #include <queue> #include <algorithm> #include <math.h> #include <vector> #include <set> #define from(i,a,n) for(int i=a;i<n;i++) #define refrom(i,n,a) for(int i=n;i>=a;i--) #define EPS 1e-10 #define mod 1000000007 using namespace std; const double INF=0x3f3f3f3f; const int MAX =8; char puzzle[MAX][MAX]; int main() { int t=0; while(gets(puzzle[0])) { int x,y; if(puzzle[0][0]=='Z') break; from(i,1,5) gets(puzzle[i]); from(i,0,5) from(j,0,5) if(puzzle[i][j]==' ') { x=i; y=j; }//找到空格的位置 char c; bool flag=false;//标记变量,用于判断是否越界 while((c=getchar())!='0') { if(flag) continue;//如果已经越界,则不用继续操作 if(c=='R') { if(y+1>=5) flag=true;//越界进行标记,否则交换两个字符的位置 else swap(puzzle[x][y],puzzle[x][y+1]); y++;//空格坐标相应的改变 } if(c=='L') { if(y-1<0) flag=true; else swap(puzzle[x][y],puzzle[x][y-1]); y--; } if(c=='B') { if(x+1>=5) flag=true; else swap(puzzle[x][y],puzzle[x+1][y]); x++; } if(c=='A') { if(x-1<0) flag=true; else swap(puzzle[x][y],puzzle[x-1][y]); x--; } /*cout<<c<<endl; from(i,0,5) from(j,0,5) { if(j!=4) printf("%c ",puzzle[i][j]); else printf("%c\n",puzzle[i][j]); } cout<<endl;*/ } getchar();//这个很重要,拿掉操作后面的回车,否则影响下一个数据的结果 if(t) printf("\n");//除第一个数据,后面每个数据与前一个数据之间有几个空格 printf("Puzzle #%d:\n",++t); if(flag) printf("This puzzle has no final configuration.\n"); else { from(i,0,5) from(j,0,5) { if(j!=4) printf("%c ",puzzle[i][j]); else printf("%c\n",puzzle[i][j]); } } } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-12-16 16:07:26