2020.02.19普及C组模拟赛8(第一题)

1.找路(okret)

题目描述ios

Mirko 刚开始学车,所以他还不会在一个很狭窄的地方掉头,因此他想找一个不须要掉头的地方学车。Mirko立刻发现他想找的地方必须没有死胡同,由于死胡同是不可能出来的,除非掉头(假设Mirko也不会倒车)。如今,你须要写一个程序,来分析一个地方的地图,研究是否这个地方适合Mirko练习开车。web

这张地图是包含R*C个单元格的,单元格中的“X”表明一个建筑物,单元格中的“.”表明路面。从一个路面单元格,Mirko能够向旁边上下左右四个方向的单元格开去,只要开过去的地方一样也是路面。svg

最后,咱们要得出这个地图是否包含死胡同,假如从任意一个路面单元格出发,沿着任何一个能够行驶的方向,咱们能够不用掉头就能返回到出发点,那么这个地图就是没有死胡同的。spa

输入.net

第一行包括两个整数R和C(3<=R,C<=10),表示这个地图的大小。code

接下来R行,每行有C个字符,每一个字符多是“X”和“.”。地图中至少有两个路面单元格,而且全部的路面都是相连的(相互可达的)。xml

输出blog

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

样例输入和输出
在这里插入图片描述图片

正解
不少人都会去用dfs,但咱们还能够用暴力
咱们只用判断每一个路的四周,若是四周只有一条路,就说明是死胡同,直接输出1
AC代码

#include<iostream>
#include<cstdio>
using namespace std;
int r,c,s,m,a[105][105];
char ch;
int main()
{
	freopen("okret.in","r",stdin);
	freopen("okret.out","w",stdout);
	cin>>r>>c;
	for(int i=1;i<=r;i++)
	 for(int j=1;j<=c;j++)
	 {
	 	cin>>ch;//输入
	 	if(ch=='X')a[i][j]=1;else a[i][j]=2;
	 }
	for(int i=1;i<=r;i++)
	 for(int j=1;j<=c;j++)
	  if(a[i][j]==2)//下面是暴力(看四周有多少条路)
	  {
	 	s=0;
	 	if(a[i-1][j]==2)s++;
	 	if(a[i+1][j]==2)s++;
	 	if(a[i][j-1]==2)s++;
	 	if(a[i][j+1]==2)s++;
	 	if(s<2){m=1;break;}
	  } 
	cout<<m;  
	return 0;
}

下面附本次比赛的其余题目

2020.02.19普及C组模拟赛8(第一题)
2020.02.19普及C组模拟赛8(第二题)
2020.02.19普及C组模拟赛8(第三题)
2020.02.19普及C组模拟赛8(第四题)
2020.02.19普及C组模拟赛8(总结)

谢谢