• CSUOJ 1224 ACM小组的古怪象棋


    Description

    ACM小组的Samsara和Staginner对中国象棋特别感兴趣,尤其对马(可能是因为这个棋子的走法比较多吧)的使用进行深入研究。今天他们又在 构思一个古怪的棋局:假如Samsara只有一个马了,而Staginner又只剩下一个将,两个棋子都在棋盘的一边,马不能出这一半棋盘的范围,另外这 一半棋盘的大小很奇特(n行m列)。Samsara想知道他的马最少需要跳几次才能吃掉Staginner的将(我们假定其不会移动)。当然这个光荣的任 务就落在了会编程的你的身上了。

    Input

    每组数据一行,分别为六个用空格分隔开的正整数n,m,x1,y1,x2,y2分别代表棋盘的大小n,m,以及将的坐标和马的坐标。(1<=x1,x2<=n<=20,1<=y1,y2<=m<=20,将和马的坐标不相同)

    Output

    输出对应也有若干行,请输出最少的移动步数,如果不能吃掉将则输出“-1”(不包括引号)。

    Sample Input

    8 8 5 1 4 5

    Sample Output

    3

    Hint

    思路:bfs ,推出在有无马脚的情况下结果是一样的结论
    #include<stdio.h>
    #include<string.h>
    #include<queue>
    #include<algorithm>
    using namespace std; 
    #define MAXN 100010
    struct node{
    	int x,y,sum;
    };
    queue<node>q;
    int vis[25][25],sum;
    int dir[8][2]={2,1,1,2,-1,2,-2,1,-2,-1,-1,-2,1,-2,2,-1};
    int n,m,x_1,x_2,y_1,y_2;
    bool check(int x,int y)
    {
    	if(x>=1&&y>=1&&x<=n&&y<=m&&!vis[x][y])
    		return true;
    	return false;	
    }
    int bfs()
    {
    	node u,v;
    	while(!q.empty())
    	{
    		u=q.front();
    		q.pop();
    		for(int i=0;i<8;i++)
    		{
    			v.x=u.x+dir[i][0];
    			v.y=u.y+dir[i][1];
    			v.sum=u.sum+1;
    			if(check(v.x,v.y))
    			{
    				if(v.x==x_1&&v.y==y_1)
    					return v.sum;
    				vis[v.x][v.y]=1;
    				q.push(v);
    				
    			}	
    		}
    	}
    	return 0;
    }
    
    int main()
    {
    	int T;
    
    	while(~scanf("%d%d%d%d%d%d",&n,&m,&x_1,&y_1,&x_2,&y_2))
    	{ 
    		memset(vis,0,sizeof(vis));
    		 while(!q.empty())
    		 	q.pop();
    		node u;
    		u.x=x_2;u.y=y_2;u.sum=0;
    		q.push(u);
    		vis[x_2][y_2]=1;
    		int num=bfs();
    		if(num)
    			printf("%d
    ",num);
    		else
    			printf("-1
    ");
    	}
    	return 0;
    }
    /**********************************************************************
    	Problem: 1224
    	User: leo6033
    	Language: C++
    	Result: AC
    	Time:4 ms
    	Memory:1936 kb
    **********************************************************************/
    


  • 相关阅读:
    .gitignore语法
    每日阅读
    css摘要
    ubuntu安装qq、微信
    django中views中方法的request参数
    js html标签select 中option 删除除了第一行外的其他行
    js 新增标签、标签属性
    python中None与0、Null、false区别
    python class中__init__函数、self
    for foreach循环
  • 原文地址:https://www.cnblogs.com/csu-lmw/p/9124455.html
Copyright © 2020-2023  润新知