zoukankan      html  css  js  c++  java
  • 【UVa】439 Knight Moves(dfs)

    题目

    题目
     


    分析

    没有估价函数的IDA。。。。。。
     


    代码

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    int q,dx[10]={2,2,-2,-2,1,-1,1,-1},dy[10]={1,-1,1,-1,2,2,-2,-2},ans=1<<15;
    bool vis[11][11];
    int x1,y1,x2,y2;
    bool in(int x,int y){ return x>=1&&x<=8&&y>=1&&y<=8; }
    void dfs(int x,int y,int num,int p)
    {
    	if(p>q) return;
    	if(x==x2 && y==y2)
    	{
    		ans=min(ans,num);
    		return;
    	}
    	for(int i=0;i<8;i++)
    	{
    		int px=x+dx[i],py=y+dy[i];
    		if(!in(px,py) || vis[px][py]) continue;
    	//	printf("(%d,%d) -> (%d,%d)
    ",x,y,px,py);
    		vis[px][py]=true;
    		dfs(px,py,num+1,p+1);
    		vis[px][py]=false;
    	}
    	return;
    }
    int main()
    {
    	char s1[20],s2[20];
    //	freopen("1.txt","w",stdout);
    	while(scanf("%s%s",s1,s2)==2)
    	{
    		memset(vis,0,sizeof(vis));
    		ans=1<<15;q=0;
    		y1=s1[0]-'a'+1; x1=s1[1]-'0';
    		y2=s2[0]-'a'+1; x2=s2[1]-'0';
    		vis[x1][y1]=true;
    		while(ans==1<<15)
    		{
    			dfs(x1,y1,0,0);
    			q++;
    		}
    		printf("To get from %s to %s takes %d knight moves.
    ",s1,s2,ans);
    	}
    	return 0;
    }
    
  • 相关阅读:
    第十三周总结
    第一阶段意见评论
    第十二周总结
    关于transform的3D变形函数
    12.9学习内容
    12.8学习的内容
    这是自己的第一篇博客
    食物链
    poj1988Cute Stacking
    银河英雄传说
  • 原文地址:https://www.cnblogs.com/noblex/p/8007424.html
Copyright © 2011-2022 走看看