水題,不解釋。。。
#include<iostream>
#include <cstring>
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++;
cin>>p>>q;
cout<<"Scenario #"<<k<<":"<<endl;
memset(visited,0,sizeof(visited));
res=false;
dfs(1,1,1);
if(res==false)
cout<<"impossible\n";
else
cout<<endl;
cout<<endl;
}
return 0;
}