• 坦克战车bfs


    1647: 2018蓝桥杯培训-搜索专题-day 1 广度优先搜索作业题3

    描述

    题目描述:

    X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废。
    某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短?
    已知的地图是一个方阵,上面用字母标出了A,B区,其它区都标了正号或负号分别表示正负能量辐射区。
    例如:
    A + - + -
    - + - - +
    - + + + -
    + - + - +
    B + - + -
    坦克车只能水平或垂直方向上移动到相邻的区。

    输入:

    输入第一行是一个整数n,表示方阵的大小, 4<=n<100
    接下来是n行,每行有n个数据,可能是A,B,+,-中的某一个,中间用空格分开。
    A,B都只出现一次。

    输出:

    要求输出一个整数,表示坦克从A区到B区的最少移动步数。
    如果没有方案,则输出-1

    样例输入
    5
    A + - + -
    - + - - +
    - + + + -
    + - + - +
    B + - + -
    样例输出
    10
    #include<iostream>
    using namespace std;
    #include<math.h>
    #include<queue>
    struct node{
    	int  x,y;
    	int step;
    };
    char a[110][110];
    queue<node> q;
    int vis[100+10][100+10]={0};
    int x2, y2;
    int n;
    int k[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
    bool check(int x,int y)
    {
    	if(x>=0&&x<n&&y>=0&&y<n&&vis[x][y]==0)return true;
    	return false;
    }
    int bfs(int x1,int y1)
    {
    	while(!q.empty())q.pop();
    	q.push({x1,y1,0});
    	vis[x1][y1]=1;
    	while(!q.empty())
    	{
    		node ss=q.front();
    		if(ss.x==x2&&ss.y==y2)
    		{
    			return ss.step;
    		}
    		q.pop();
    		int i;
    		for(i=0;i<4;i++)
    		{
    			if(check(ss.x+k[i][0],ss.y+k[i][1]))
    			{
    				if(fabs(a[ss.x+k[i][0]][ss.y+k[i][1]]-a[ss.x][ss.y])==0)
    				continue;
    				vis[ss.x+k[i][0]][ss.y+k[i][1]]=1;
    				q.push({ss.x+k[i][0],ss.y+k[i][1],ss.step+1});
    			}
    		}
    	}
    }
    int main()
    {
    	
    	cin>>n;
    	int i,j;
    	int x1,y1;
    
    
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<n;j++)
    		{
    			cin>>a[i][j];
    			if(a[i][j]=='A')
    			{
    				x1=i;y1=j;
    			}
    				if(a[i][j]=='B')
    			{
    				x2=i;y2=j;
    			}
    		}
    	}
    	cout<<bfs(x1,y1)<<endl;
    	return 0;
    } 
    

      

  • 相关阅读:
    移动联通电信运营商手机号段分配
    PHP调用内容DES加密的SOAP接口
    微信服务项目表
    微信支付curl出错及错误码解决方案
    微信小店二次开发功能套餐列表
    关于Reactor和Proactor的差别
    ACM-经典DP之Monkey and Banana——hdu1069
    Java怎样处理EXCEL的读取
    android依据区域高度切割文本问题
    合理的keyword密度散布与黑帽SEO之躲藏文本
  • 原文地址:https://www.cnblogs.com/zhangshuyao/p/8661569.html
Copyright © 2020-2023  润新知