贴上自己的代码,欢饮纠错。
程序代码:
#include <stdio.h> #include <string.h> int dx[]={-1,1,0,0}; int dy[]={0,0,-1,1};//上下左右方向 typedef struct state{ int d[4]; }state; int num = 0;//填写个数 state s[201]; int map[200][200];//表 int vis[200][200];//标记是否访问过 int n; void write_data(int v,state &ss,int x,int y,int &num); void print_r(); int main(){ bool flag = true; state temp; int v1; scanf("%d",&n); memset(map,0,sizeof(map)); memset(vis,false,sizeof(vis)); for(int i=1; i <= n; i++){ scanf("%d%d%d%d",&s[i].d[0],&s[i].d[1],&s[i].d[2],&s[i].d[3]); if( flag && s[i].d[0] == 0 && s[i].d[2] == 0){ temp = s[i]; v1 = i; flag = false; } } num = 1; write_data(v1,temp,0,0,num); print_r(); return 0; } void write_data(int v,state &ss,int x,int y,int &num){//v是当前要填的数据,ss为其对应状态,x,y表示位置,num就是第几个。 if(num == n + 1 ){ return; }else{ if(x < 0 || y < 0 || vis[x][y]) return; map[x][y] = v; vis[x][y] = true; num++; for(int i=0; i < 4 ;i++){ if(ss.d[i] != 0) write_data(ss.d[i],s[ss.d[i]],x + dx[i],y + dy[i],num); } } } void print_r(){ bool flag = false; for(int i = 0;i < 200 ;i++){ for(int j = 0; j < 200; j++){ if(map[i][j]){ printf("%d ",map[i][j]); }else{ break; } } printf("\n"); if(!map[i+1][0]) break; } }
再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!