A - A Knight's Journey
dfs
代码如下:
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
const int N=30;
int book[N][N];
struct Node{
char x;
int y;
}node[N*N];
int m,n;
int flag;
int next[8][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};
void dfs(int x,int y,int num)
{
int tx,ty;
if(flag)
return;
node[num].y=x+1;
node[num].x='A'+y;
if(num>=m*n)
{
flag=1;
return;
}
for(int i=0;i<8;i++)
{
tx=x+next[i][0];
ty=y+next[i][1];
if(tx<0||tx>=m||ty<0||ty>=n)
continue;
if(book[tx][ty]==0)
{
book[tx][ty]=1;
dfs(tx,ty,num+1);
book[tx][ty]=0;
}
}
}
int main()
{
int t;
while(cin>>t)
{
for(int i=0;i<t;i++)
{
cin>>m>>n;
if(i!=0)
cout<<endl;
printf("Scenario #%d:\n",i+1);
memset(book,0,sizeof(book));
flag=0;
book[0][0]=1;
dfs(0,0,1);
if(flag)
{
for(int i=1;i<=m*n;i++)
cout<<node[i].x<<node[i].y;
cout<<endl;
}
else
cout<<"impossible"<<endl;
}
}
return 0;
}