• 北京信息科技大学第十一届程序设计竞赛D:kotori和迷宫(bfs)


    https://ac.nowcoder.com/acm/contest/940/D
     

    题目描述

    kotori在一个n*m迷宫里,迷宫的最外层被岩浆淹没,无法涉足,迷宫内有k个出口。kotori只能上下左右四个方向移动。她想知道有多少出口是她能到达的,最近的出口离她有多远?

    输入描述:

    第一行为两个整数n和m,代表迷宫的行和列数 (1≤n,m≤30)
    
    后面紧跟着n行长度为m的字符串来描述迷宫。'k'代表kotori开始的位置,'.'代表道路,'*'代表墙壁,'e'代表出口。保证输入合法。

    输出描述:

    若有出口可以抵达,则输出2个整数,第一个代表kotori可选择的出口的数量,第二个代表kotori到最近的出口的步数。(注意,kotori到达出口一定会离开迷宫)
    
    若没有出口可以抵达,则输出-1。

    示例1

    输入

    复制

    6 8
    e.*.*e.*
    .**.*.*e
    ..*k**..
    ***.*.e*
    .**.*.**
    *......e

    输出

    复制

    2 7

    说明

    可供选择坐标为[4,7]和[6,8],到kotori的距离分别是8和7步。
    #include <stdio.h>
    #include <queue>
    #include <algorithm>
    using namespace std;
    #define N 50
    char str[N][N];
    int book[N][N];
    struct date{
    	int x;
    	int y;
    	int t;
    }a, b;
    int main()
    {
    	int n, m, i, j, ans, tx, ty, minn=9999999,temp=0;
    	int next[4][2]={1,0, -1,0, 0,1, 0,-1};
    	scanf("%d%d", &n, &m);
    	for(i=0; i<n; i++)
    		scanf("%s", str[i]);
    	queue<date>q;
    	for(i=0; i<n; i++)
    	{
    		for(j=0; j<m; j++)
    			if(str[i][j]=='k')
    			{
    				temp=1;
    				break;
    			}
    		if(temp==1)
    			break;
    	}
    	a.x=i;
    	a.y=j;
    	a.t=0;
    	q.push(a); book[i][j]=1;
    	ans=0;
    	while(!q.empty())
    	{
    		a=q.front();
    		q.pop();
    		if(str[a.x][a.y]=='e')
    		{
    			ans++;
    			minn=min(minn, a.t);
    			continue;
    		}
    		for(i=0; i<4; i++)
    		{
    			tx=a.x+next[i][0];
    			ty=a.y+next[i][1];
    			if(tx<0 || ty<0 || tx>=n || ty>=m)
    				continue;
    			if(str[tx][ty]!='*' && book[tx][ty]==0)
    			{
    				b.x=tx;
    				b.y=ty;
    				b.t=a.t+1;
    				q.push(b);	
    			}
    			book[tx][ty]=1;	
    		} 
    	}
    	if(minn==9999999)	
    		printf("-1
    ");
    	else
    		printf("%d %d
    ", ans, minn);
    	return 0;
    }
  • 相关阅读:
    矩阵快速幂 HDU3483
    欧拉函数 求小于某个数并与其互质的数的个数
    扩展欧几里德算法求逆元3
    拓展欧几里德算法求逆元2
    【20140113-2】MyEclipse生成javadoc时出错:编码GBK的不可映射字符
    【131202】SQL
    【20140113】package 与 import
    系统架构等级
    ora-01658 :无法为表空间USERS 中的段创建INITIAL区
    WMSYS.WM_CONCAT 函數的用法
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/11852645.html
Copyright © 2020-2023  润新知