poj2488 样例过了为什么还是WA???有人帮忙看一下吗?

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;
}