poj 2488 A Knight's Journey (dfs)

题意 马走完整个棋盘的路径  (注意 搜索的顺序)
http://poj.org/problem?id=2488
#include<stdio.h>
#include<string.h>
#define N 100
int d[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};
int m[N],f,k,r,c,vis[N][N],read[N][N];
void dfs(int x,int y,int k)
{

    int i;
    if(f==1)return ;
    read[k][0]=x;
    read[k][1]=y;
   if(k==r*c-1)
   {
       f=1;

       for(i=0;i<=k;i++)
       {
           printf("%c%d",'A'+read[i][0],read[i][1]+1);
       }
       printf("\n");

       return ;

   }
   for(i=0;i<8;i++)
   {
       if(f==1)return ;
       int dx=x+d[i][0];
       int dy=y+d[i][1];
       if(dx>=0&&dx<c&&dy>=0&&dy<r)
       {


         if(!vis[dx][dy])
         {

           vis[dx][dy]=1;
           dfs(dx,dy,k+1);
           vis[dx][dy]=0;
         }
       }

   }

}
int main()
{
    int t,i,j;
    int l=0;
    scanf("%d",&t);
    while(t--)
    {
        l++;

        scanf("%d%d",&r,&c);
       printf("Scenario #%d:\n",l);
        f=0;

        for(i=0;i<c;i++)
        {
            for(j=0;j<r;j++)
             {
                  if(f)break;
                   memset(vis,0,sizeof(vis));
                 vis[i][j]=1;
                 if(!f)
                 dfs(i,j,0);
             }
             if(f)break;
        }

        if(f==0)printf("impossible\n");
        printf("\n");

    }
}
  

  

posted @ 2012-03-29 16:13  Szz  阅读(190)  评论(0编辑  收藏  举报