zoukankan      html  css  js  c++  java
  • POJ 2488 A Knight's Journey

    POJ_2488

    又是一个骑士问题,果然在广搜中骑士问题是很经典的哈。这个题目比之间做过的骑士的问题实质上就是多了路径的打印,并且最后如果存在路径的话,路径要求是字典序最小的方案。

    做到字典序最小还是比较容易的,只要在dfs的时候按照从左到右,从上到下的顺序去dfs就可以了。

    我又一次把棋盘上的运算搞错了,以后一定要引起注意!上下移动对应x的减少与增加,左右移动对应着y的减少与增加!

    #include<stdio.h>
    #include
    <string.h>
    int vis[30][30],fax[30][30],fay[30][30],p,q,count,n;
    int ansx[30],ansy[30],tx,ty,;
    int dx[]={-1,1,-2,2,-2,2,-1,1};
    int dy[]={-2,-2,-1,-1,1,1,2,2};
    int dfs(int x,int y)
    {
    int i,newx,newy;
    if(count==n)
    {
    tx
    =x;
    ty
    =y;
    return 1;
    }
    for(i=0;i<8;i++)
    {
    newx
    =x+dx[i];
    newy
    =y+dy[i];
    if(!vis[newx][newy]&&newx>0&&newx<=p&&newy>0&&newy<=q)
    {
    count
    ++;
    vis[newx][newy]
    =1;
    if(dfs(newx,newy))
    {
    fax[newx][newy]
    =x;
    fay[newx][newy]
    =y;
    return 1;
    }
    count
    --;
    vis[newx][newy]
    =0;
    }
    }
    return 0;
    }
    int main()
    {
    int i,j,k,t,tt,x,y,ans;
    scanf(
    "%d",&t);
    for(tt=1;tt<=t;tt++)
    {
    printf(
    "Scenario #%d:\n",tt);
    scanf(
    "%d%d",&p,&q);
    n
    =p*q;
    for(i=1;i<=q;i++)
    {
    for(j=1;j<=p;j++)
    {
    memset(vis,
    0,sizeof(vis));
    vis[j][i]
    =1;
    count
    =1;
    fax[j][i]
    =-1;
    fay[j][i]
    =-1;
    if(dfs(j,i))
    break;
    }
    if(count==n)
    break;
    }
    if(count!=n)
    {
    printf(
    "impossible\n\n");
    continue;
    }
    x
    =tx;
    y
    =ty;
    ans
    =0;
    while(x!=-1)
    {
    ansx[ans]
    =x;
    ansy[ans]
    =y;
    ans
    ++;
    k
    =x;
    x
    =fax[k][y];
    y
    =fay[k][y];
    }
    for(i=ans-1;i>=0;i--)
    printf(
    "%c%d",ansy[i]-1+'A',ansx[i]);
    printf(
    "\n\n");
    }
    return 0;
    }

      

  • 相关阅读:
    小公司的10k前端工程师应该会什么?
    webService和Restful
    码农如何主动学习?
    20个Web前端开发工程师必看的国外网站
    网站主题和内容的三个类型
    HTTP慢速攻击
    Linux等待队列原理与实现
    签名你的每个 Git Commit
    浅谈 Linux 下常用 Socket 选项设置
    API接口设计,需要注意这4点
  • 原文地址:https://www.cnblogs.com/staginner/p/2150020.html
Copyright © 2011-2022 走看看