Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198201
  • 博文数量: 67
  • 博客积分: 2970
  • 博客等级: 少校
  • 技术积分: 685
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-23 11:36
文章分类

全部博文(67)

文章存档

2012年(2)

2011年(19)

2010年(46)

我的朋友

分类: C/C++

2010-09-22 19:56:04

 

#include<stdio.h>
#include<math.h>

char ans[60];
bool visit[26][26];
int n,m;

bool dfs(int x,int y,int depth)
{
    if(depth==n*m)
    {
        return true;
    }
    for(int j=0;j<m;j++)        //由于按字典顺序访问,则先遍历棋盘的行,后遍历棋盘的列

        for(int i=0;i<n;i++)
        {
            if(!visit[i][j]&&((abs(i-x)==2&&abs(j-y)==1)||(abs(i-x)==1&&abs(j-y)==2)))
            {
                visit[i][j]=1;
                if(dfs(i,j,depth+1))
                {
                    ans[depth*2]='A'+j;
                    ans[depth*2+1]='1'+i;
                    return true;
                }
                visit[i][j]=0;
            }
        }
    return false;
}

int main()
{
    int cases,count=0;
    scanf("%d",&cases);
    while(cases--)
    {
        scanf("%d%d",&n,&m);
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                visit[i][j]=0;
            //骑士能周游棋盘->骑士能从任意一点出发而遍历棋盘,又要求按字典顺序访问,则需从左上角开始遍历

        ans[0]='A';
        ans[1]='1';
        visit[0][0]=1;

        if(count) printf("\n");
        printf("Scenario #%d:\n",++count);
        if(dfs(0,0,1))
        {
            ans[n*m*2]='\0';
            printf("%s\n",ans);
        }
        else printf("impossible\n");
    }
    return 0;
}


阅读(862) | 评论(0) | 转发(0) |
0

上一篇:pku2362 Square

下一篇:pku1184 聪明的打字员

给主人留下些什么吧!~~