poj 2488 A Knight's Journey (dfs)
题意 马走完整个棋盘的路径 (注意 搜索的顺序) http://poj.org/problem?id=2488 #include<stdio.h> #include<string.h> #define N 100 int d[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}}; int m[N],f,k,r,c,vis[N][N],read[N][N]; void dfs(int x,int y,int k) { int i; if(f==1)return ; read[k][0]=x; read[k][1]=y; if(k==r*c-1) { f=1; for(i=0;i<=k;i++) { printf("%c%d",'A'+read[i][0],read[i][1]+1); } printf("\n"); return ; } for(i=0;i<8;i++) { if(f==1)return ; int dx=x+d[i][0]; int dy=y+d[i][1]; if(dx>=0&&dx<c&&dy>=0&&dy<r) { if(!vis[dx][dy]) { vis[dx][dy]=1; dfs(dx,dy,k+1); vis[dx][dy]=0; } } } } int main() { int t,i,j; int l=0; scanf("%d",&t); while(t--) { l++; scanf("%d%d",&r,&c); printf("Scenario #%d:\n",l); f=0; for(i=0;i<c;i++) { for(j=0;j<r;j++) { if(f)break; memset(vis,0,sizeof(vis)); vis[i][j]=1; if(!f) dfs(i,j,0); } if(f)break; } if(f==0)printf("impossible\n"); printf("\n"); } }