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");



    }

}

  

  

你可能感兴趣的:(poj)