//10790086 c00h00g 2488 Accepted 256K 0MS C++ 922B 2012-09-10 14:05:42 //我的vs 2005绝对是不能用了,竟然输出结果都是错误的,在visual c++ 6.0上就成功了 //这一题要求按照地点序列输出就要求按照指定的方向来寻找,行用1,2,3...标识,列用A,B,C...来标识 //考察:深搜+回溯 #include<iostream> using namespace std; int dir[8][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}}; int N,p,q; int visited[27][27]; struct Node{ int x,y; }; Node nd[28]; bool res; void dfs(int x,int y,int len){ if(res) return; visited[x][y]=1; nd[len].x=x; nd[len].y=y; if(len==p*q){ res=true; for(int i=1;i<=len;i++) cout<<(char)(nd[i].y+64)<<nd[i].x; return; } for(int i=0;i<8;i++){ int a=x+dir[i][0]; int b=y+dir[i][1]; if(a>0&&a<=p&&b>0&&b<=q){ if(visited[a][b]==0&&res==false){ dfs(a,b,len+1); if(res) return;//若已经找到则不回溯,直接返回 visited[a][b]=0;//回溯 } } } } int main(){ cin>>N; int k=0; while(N--){ k++; cout<<"Scenario #"<<k<<":"<<endl; cin>>p>>q; memset(visited,0,sizeof(visited)); res=false; dfs(1,1,1); if(res==false) cout<<"impossible\n"; else cout<<endl; cout<<endl; } return 0; }