A Knight's Journey

来源:互联网 发布:linux thrift源码安装 编辑:程序博客网 时间:2024/06/05 20:16

A - A Knight's Journey

 
题意:问马是否能经过所有的点,并输出路径(按字典序最小的),否则,输出important

dfs

代码如下:

#include<iostream>#include<string.h>#include<stdio.h>using namespace std;const int N=30;int book[N][N];struct Node{    char x;    int y;}node[N*N];int m,n;int flag;int next[8][2]={{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};void dfs(int x,int y,int num){    int tx,ty;    if(flag)        return;    node[num].y=x+1;    node[num].x='A'+y;    if(num>=m*n)    {        flag=1;        return;    }    for(int i=0;i<8;i++)    {        tx=x+next[i][0];        ty=y+next[i][1];        if(tx<0||tx>=m||ty<0||ty>=n)            continue;        if(book[tx][ty]==0)        {            book[tx][ty]=1;            dfs(tx,ty,num+1);            book[tx][ty]=0;        }    }}int main(){    int t;    while(cin>>t)    {        for(int i=0;i<t;i++)        {            cin>>m>>n;            if(i!=0)                cout<<endl;            printf("Scenario #%d:\n",i+1);            memset(book,0,sizeof(book));            flag=0;            book[0][0]=1;            dfs(0,0,1);            if(flag)            {                for(int i=1;i<=m*n;i++)                    cout<<node[i].x<<node[i].y;                cout<<endl;            }            else                cout<<"impossible"<<endl;        }    }    return 0;}






原创粉丝点击