• 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

    样例输入 #1

    12 16
    18 10
    
    • 1
    • 2

    样例输出 #1

    8 
    9
    
    • 1
    • 2

    提示

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

    一般的🐎都只能走日字,但是这个马与象相结合,能走日字和田字,所以偏移量数组就有12个,看到大佬有用数学公式推出来答案,直接跪了,tql,如果能回到过去,一定和自己说好好学数学,你想和过去的自己说什么呢?

    在这里插入图片描述

    #include
    #include
    #include
    #include
    #include
    using namespace std;
    int dx[12]={1,2,2,2,2,1,-1,-2,-2,-2,-2,-1};
    int dy[12]={2,2,1,-1,-2,-2,-2,-2,-1,1,2,2};
    const int N=30;
    int g[N][N];
    struct node{
    	int x,y,step;
    };
    int x1,y3,x2,y2;
    void bfs(int a,int b)
    {
    	queue<node> q;
    	q.push({a,b});
    	
    	while(!q.empty())
    	{
    		node st=q.front();
    		q.pop();
    		for(int i=0;i<12;i++)
    		{
    			int x=st.x+dx[i],y=st.y+dy[i];
    			if(x<1||y<1||x>30||y>30||g[x][y]==1)continue;
    			if(g[x][y]==0)
    			{
    				q.push({x,y,st.step+1});
    				g[x][y]=1;
    			}
    			if(x==1&&y==1)cout<<st.step+1<<endl;
    		}
    	}
    }
    int main()
    {
    	cin>>x1>>y3>>x2>>y2;
    	bfs(x1,y3);
    	memset(g,0,sizeof g);
    	bfs(x2,y2);
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    y1不能用,好像库函数里相冲突了

  • 相关阅读:
    C++初阶(九)内存管理
    java计算机毕业设计网络游戏管理网站源码+数据库+系统+lw文档+mybatis+运行部署
    ThreadLocal
    [vs+qt] vs2015+qt tool属性设置处无法添加模块
    文件共享服务samba
    windows域的搭建
    可降阶的高阶方程与高阶线性微分方程
    Go十大常见错误第8篇:并发编程中Context使用常见错误
    YonBuilder开发之后端函数
    Java的选择排序、冒泡排序、插入排序
  • 原文地址:https://blog.csdn.net/weixin_72368992/article/details/131741189