题目大意:马周游问题,输出字典序最小的周游路径。
思路:比较水的题目,DFS,直接贴代码了。
#include <stdio.h>
int data[9][9];
int q,p,flag;
int diry[8]={-2,-2,-1,-1, 1,1, 2,2};
int dirx[8]={-1, 1,-2, 2,-2,2,-1,1};
int datax[80];
int datay[80];
void DFS(int c,int x,int y) {
int x1,y1,i,j;
if (flag==1)
return;
data[x][y]=1;
datax[c]=x;
datay[c]=y;
if (c==p*q-1) {
flag=1;
return;
}
for (i=0;i<8;i++) {
x1=x+dirx[i];
y1=y+diry[i];
if (x1>=0&&x1<p&&y1>=0&&y1<q&&data[x1][y1]==0) {
DFS(c+1,x1,y1);
}
}
data[x][y]=0;
}
int main()
{
int t,i,j,k,ctr;
scanf("%d",&t);
for (ctr=1;ctr<=t;ctr++) {
scanf("%d%d",&p,&q);
for (i=0;i<=p;i++)
for (j=0;j<=q;j++)
data[i][j]=0;
flag=0;
DFS(0,0,0);
if (flag==1) {
printf("Scenario #%d:\n",ctr);
for (i=0;i<p*q;i++)
printf("%c%d",datay[i]+'A',datax[i]+1);
printf("\n");
}
else {
printf("Scenario #%d:\nimpossible\n",ctr);
}
if (ctr!=t)
printf("\n");
}
return 0;
}