• P1747 好奇怪的游戏


    题目背景

    《爱与愁的故事第三弹·shopping》娱乐章。

    调调口味来道水题。

    题目描述

    爱与愁大神坐在公交车上无聊,于是玩起了手机。一款奇怪的游戏进入了爱与愁大神的眼帘:***(游戏名被打上了马赛克)。这个游戏类似象棋,但是只有黑白马各一匹,在点x1,y1和x2,y2上。它们得从点x1,y1和x2,y2走到1,1。这个游戏与普通象棋不同的地方是:马可以走“日”,也可以像象走“田”。现在爱与愁大神想知道两匹马到1,1的最少步数,你能帮他解决这个问题么?

    输入输出格式

    输入格式:

     

    第1行:两个整数x1,y1

    第2行:两个整数x2,y2

     

    输出格式:

     

    第1行:黑马到1,1的距离

    第2行:白马到1,1的距离

    输入输出样例

    输入样例#1: 复制
    12 16
    18 10
    输出样例#1: 复制
    8 
    9

    说明

    100%数据:x1,y1,x2,y2<=20

    BFS,多看,多打,然后记住,应用。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    #include<queue>
    using namespace std;
    
    int a1,b1,a2,b2,ans;
    int dis[50][50];
    int xx[]={-2,-2,-2,-2,-1,-1,1,1,2,2,2,2};
    int yy[]={-2,-1,1,2,-2,2,-2,2,-2,-1,1,2};
    bool vis[50][50];
    
    struct node{
    	int x,y;
    }a,b;
    
    queue<node> q;
    
    void bfs(int x,int y)
    {
    	while(!q.empty())
    		q.pop();
    	memset(vis,0,sizeof(vis));
    	memset(dis,0,sizeof(dis));
    	a.x =x,a.y =y;
    	dis[x][y]=0,vis[x][y]=1;
    	q.push(a);
    	while(!q.empty())
    	{
    		b=q.front();
    		q.pop();
    		x=b.x ,y=b.y ;
    		if(x==1&&y==1)
    		{
    			ans=dis[x][y];
    			return ;
    		}
    		for(int i=0;i<12;++i)
    		{
    			int dx=x+xx[i],dy=y+yy[i];
    			if(dx>0&&dx<=50&&dy>0&&dy<=50&&!vis[dx][dy])
    			{ 
    				vis[dx][dy]=1;
    				dis[dx][dy]=dis[x][y]+1;
    				b.x =dx,b.y =dy;
    				q.push(b);
    			}
    		}
    	}
    }
    
    int main()
    {
    	scanf("%d%d%d%d",&a1,&b1,&a2,&b2);
    	bfs(a1,b1);
    	printf("%d
    ",ans);
    	bfs(a2,b2);
    	printf("%d",ans);
    	return 0;
    }

    如果你不开心,那我就把右边这个帅傻子分享给你吧,  

    你看,他这么好看,那么深情的望着你,你还伤心吗?  

    真的!这照片盯上他五秒钟就想笑了。  

    一切都会过去的。

  • 相关阅读:
    Oracle错误——ORA-12704:字符集不匹配
    nodejs 错误问题解决
    windows 卸载 node.js 怎么卸载搜索
    Git安装配置及基本使用(windows)
    破解photoshop cs6 mac
    将text中的数字转换为字符串
    JavaScript 为什么不推荐使用 eval?
    Permission denied (publickey).
    linux 命令
    恢复 git reset -hard 的误操作
  • 原文地址:https://www.cnblogs.com/Mary-Sue/p/9678686.html
Copyright © 2020-2023  润新知