贴上自己的代码,欢饮纠错。
程序代码:
程序代码:#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;
}
}

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!






