(纪中)1669. 找路(okret)【数学】

(File IO): input:okret.in output:okret.out
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
Goto ProblemSet


题目描述
M i r k o Mirko Mirko 刚开始学车,因此他还不会在一个很狭窄的地方掉头,所以他想找一个不需要掉头的地方学车。 M i r k o Mirko Mirko马上发现他想找的地方必须没有死胡同,因为死胡同是不可能出来的,除非掉头(假设Mirko也不会倒车)。现在,你需要写一个程序,来分析一个地方的地图,研究是否这个地方适合 M i r k o Mirko Mirko练习开车。
这张地图是包含 R ∗ C R*C RC个单元格的,单元格中的 “ X ” “X” X代表一个建筑物,单元格中的 “ . ” “.” .代表路面。从一个路面单元格, M i r k o Mirko Mirko可以向旁边上下左右四个方向的单元格开去,只要开过去的地方同样也是路面。
最后,我们要得出这个地图是否包含死胡同,假如从任意一个路面单元格出发,沿着任何一个可以行驶的方向,我们可以不用掉头就能返回到出发点,那么这个地图就是没有死胡同的。


输入
第一行包括两个整数 R R R C ( 3 < = R , C < = 10 ) , C(3<=R,C<=10), C3<=R,C<=10),表示这个地图的大小。
接下来 R R R行,每行有 C C C个字符,每个字符可能是 “ X ” “X” X “ . ” “.” .。地图中至少有两个路面单元格,并且所有的路面都是相连的(相互可达的)。

输出
输出只有一行,输出 0 0 0表示这个地图没有死胡同,输出 1 1 1表示这个地图存在死胡同。


样例输入输出
(纪中)1669. 找路(okret)【数学】_第1张图片


数据范围限制

提示


解题思路
判断空地上下左右有多少 ′ x ′ 'x' x < = 2 <=2 <=2则不是死胡同


代码

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int r,c,ans;
char a[15][15];
int main()
{
    freopen("okret.in","r",stdin);
    freopen("okret.out","w",stdout);
    scanf("%d%d",&r,&c);
    for(int i=1; i<=r; i++) {
        for(int j=1; j<=c; j++)
            cin>>a[i][j];
    }
    for(int i=1; i<=r; i++) {
        for(int j=1; j<=c; j++) {
            if(a[i][j]=='.') {
                if(a[i+1][j]=='X') ans++;
                if(a[i-1][j]=='X') ans++;
                if(a[i][j+1]=='X') ans++;
                if(a[i][j-1]=='X') ans++;
                if(i+1>r)ans++;
                if(i-1<1)ans++;
                if(j-1<1)ans++;
                if(j+1>c)ans++;
            }
        if(ans>2) {
                cout<<1;
                return 0;
            }
            ans=0;
        }
    }
    cout<<0;
}

你可能感兴趣的:(纪中,数学)