马踏棋盘问题,深度优先搜索,帮忙看一下哪里有问题
大致题意:给出一个p行q列的国际棋盘,马可以从任意一个格子开始走,问马能否不重复的走完所有的棋盘。如果可以,输出按字典序排列最小的路径。打印路径时,列用大写字母表示(A表示第一列),行用阿拉伯数字表示(从1开始),先输出列,再输出行。代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int a[28],b[28],visited[28][28];
int step[8][2]={-2,-1,-2,1,-1,-2,-1,2,1,-2,1,2,2,-1,2,1};
int dfs(int sx,int sy,int steps,int p,int q){
int i,gx,gy;
a[steps]=sx;
b[steps]=sy;
visited[sx][sy]=1;
if(steps==p*q) return 1;
for(i=0;i<8;i++){
gy=sy+step[i][0];
gx=sx+step[i][1];
if(gx>0 && gy>0 && gx<=p && gy<=q && visited[gx][gy]==0){
dfs(gx,gy,steps+1,p,q);
}
}
visited[sx][sy]=0;
return 0;
}
int main(void){
int n,n_,p,q,i;
scanf("%d",&n);
while(n--){
scanf("%d %d",&p,&q);
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(visited,0,sizeof(visited));
if(dfs(1,1,1,p,q)){
for(i=1;i<=p*q;i++) printf("%c%d",b[i]+'A'-1,a[i]);
}
else printf("impossible");
printf("\n\n");
}
return 0;
}
无论输入什么,总是输出“impossible“,求帮忙看一下哪里有问题,谢谢。