按国际象棋上的马走,从A1开始,记录访问全部点的字典序
dfs
#include <cstdio> #include <cstring> using namespace std; int p,q,sum; char path[70]; bool flag,visi[35][35]; int dx[8]={-1,1,-2,2,-2,2,-1,1}; int dy[8]={-2,-2,-1,-1,1,1,2,2}; void dfs(int dep,int x,int y) { int i,j; if(dep==sum) { for(i=0;i<2*dep;i++) { printf("%c",path[i]); } printf("\n"); flag=true; } else { for(i=0;i<8&&flag==false;i++) { int x1=x+dx[i]; int y1=y+dy[i]; if(x1>0&&y1>0&&x1<=p&&y1<=q&&!visi[x1][y1]) { visi[x1][y1]=true; path[2*dep]='A'+y1-1; path[2*dep+1]='0'+x1; dfs(dep+1,x1,y1); visi[x1][y1]=false; } } } } int main() { int n,i,j; //freopen("1.txt","r",stdin); scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d%d",&p,&q); sum=p*q; flag=false; printf("Scenario #%d:\n",i); path[0]='A'; path[1]='1'; visi[1][1]=true; dfs(1,1,1); if(!flag) printf("impossible\n"); if(i!=n) printf("\n"); } }
作者:a593547438 发表于2013-9-12 8:50:54 原文链接
阅读:72 评论:0 查看评论