您的位置:首页 > 其它

poj2488(dfs)

2016-08-09 22:09 211 查看
#include<stdio.h>

#include<stdlib.h>

#include<string.h>

int map[50][50];

int x[50],y[50],t,j=0,flag,a,b;

int dir[8][2]={-2,-1,-2,1,-1,-2,-1,2,1,-2,1,2,2,-1,2,1};//搜索的方向

void dfs(int xx,int yy)

{

    int x1,y1,i;

    if(flag)//如果flag==1搜索结束

    {

        return;

    }

    t++;//每搜索一个空格,t就加一

    x[t]=xx;//记录走过的x路径

    y[t]=yy;//记录走过的y路径

    if(t==a*b)//全部走完,标记退出

    {

        flag=1;

        return;

    }

    map[xx][yy]=1;//对搜索过后的元素进行标记

    for(i=0;i<8;i++)

    {

        x1=xx+dir[i][0];

        y1=yy+dir[i][1];

        if(x1>0&&x1<=b&&y1>0&&y1<=a&&map[x1][y1]==0)//判断是否越界,条件是否满足

        {

            dfs(x1,y1);

            t--;//如果当前元素符合继续搜索的条件,去掉该点重复的一次

        }

    }

    map[xx][yy]=0;//不符合条件回溯时地图重新标记

    }

int main()

{

    int n;

    while(scanf("%d",&n)!=EOF)

    {

        j=0;

        memset(map,0,sizeof(map));

        while(n--)

        {

            t=flag=0;

            j++;//记录组数

            scanf("%d%d",&a,&b);

            dfs(1,1);//从起始坐标(1,1)开始

            printf("Scenario #%d:\n",j);

            if(flag)

            {

                for(int i=1;i<=a*b;i++)

                    printf("%c%d",x[i]+64,y[i]);//输出走过的路径,其中x为字母,要加64,转化成相应的字母

                printf("\n");

            }

            else

                printf("impossible\n");

            printf("\n");//勿忘每一组后有一个空格

         }

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: