poj2488 样例过了为什么还是WA???
有人帮忙看一下吗?
#include <stdio.h>
#include <stdlib.h>
#define max 30
struct pos
{
int x;
int y;
int flag;
}map[max][max],res[max];
int n,m,num,cnt=1;
int l=1;
int dx[9]={-2,-2,-1,-1,1,1,2,2};
int dy[9]={-1,1,-2,2,-2,2,-1,1};
void dfs(int x, int y)
{
if(l==0)
return;
int i,nx,ny,flag=0;
for(i=0; i<9; i++)
{
nx=x+dx[i];
ny=y+dy[i];
if(nx<=n && nx>=1 && ny<=m && ny>=1 && map[nx][ny].flag==1 )//&&(dy[i]==1||dy[i]==-2))//保证字典序
{
flag=1;
cnt++;
map[nx][ny].flag=0;
res[cnt].x=nx;
res[cnt].y=ny;
dfs(nx,ny);
cnt--;
map[nx][ny].flag=1;
}
}
//if(flag==0)//无路可走
//{
if(cnt==n*m)
{
l=0;
printf("Scenario #%d:\n",3-num);
for(i=1; i<=n*m; i++)
{
printf("%c%d",'A'+res[i].y-1,res[i].x);
}
printf("\n");
if(num!=0)
printf("\n");
}
return;
//}
}
int main()
{
int i,j;
scanf("%d",&num);
while(num--)
{
scanf("%d %d",&n,&m);
l=1;
res[cnt].x=1,res[cnt].y=1;
for(i=1; i<=n; i++)
{
for(j=1; j<=m; j++)
{
map[i][j].flag=1;
//map[i][j].x=i;
}
}
map[1][1].flag=0;
dfs(1,1);
if(l==1)//impossible
{
printf("Scenario #%d:\n",3-num);
printf("impossible\n");
if(num!=0)
printf("\n");
}
}
return 0;
}