hdu-1372

来源:互联网 发布:linux 编译安装 lnmp 编辑:程序博客网 时间:2024/05/18 03:37

深搜

#include<stdio.h>#include<memory.h>int knight[8][8];int x[]={1, 1, 2, 2,-1,-1,-2,-2};int y[]={2,-2, 1,-1, 2,-2, 1,-1};void dfs(int a,int b,int t){if(a<0 || b<0 || a >7 || b>7 || t>=knight[a][b])return ;knight[a][b]=t;int i;for(i=0;i<8;++i)dfs(a+x[i],b+y[i],t+1);}int main(){char a[10],b[10];//freopen("d:\\test.txt","r",stdin);while(scanf("%s%s",a,b)!=EOF){memset(knight,10,sizeof(knight));dfs(a[0]-'a',a[1]-'1',0);printf("To get from %s to %s takes %d knight moves.\n",a,b,knight[b[0]-'a'][b[1]-'1']);}return 0;}

  广搜

#include<iostream>#include<queue>using namespace std;struct point{int x,y,c;}f,t;int main(){//freopen("d:\\test.txt","r",stdin);int i;queue<point> q;char a[3],b[3];int x[]={1, 1,2, 2,-1,-1,-2,-2};int y[]={2,-2,1,-1, 2,-2, 1,-1};while(scanf("%s%s",a,b)!=EOF){while(!q.empty())q.pop();f.x=a[0]-'a';f.y=a[1]-'1';f.c=0;t.x=b[0]-'a';t.y=b[1]-'1';q.push(f);point p;while(true){f=q.front();q.pop();if(f.x==t.x && f.y==t.y)break;for(i=0;i<8;++i){p.x=f.x+x[i];p.y=f.y+y[i];p.c=f.c+1;if(p.x<0 || p.y<0 || p.x>7 || p.y>7)continue;q.push(p);}}printf("To get from %s to %s takes %d knight moves.\n",a,b,f.c);}return 0;}