前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Codeforces1214 D Treasure Island

Codeforces1214 D Treasure Island

作者头像
用户2965768
发布2019-09-06 10:13:44
3510
发布2019-09-06 10:13:44
举报
文章被收录于专栏:wymwym

题意:给你一张图 ,从 1,1走到 n , m 问最少堵多少点,使得路不连通

解: 最多 2 个, 两次深搜。

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
const int maxn =  1000005;
int dir[2][2] = {1,0,0,1};
int s,t;
char mp[maxn];
int n,m,vis[maxn];
int ans;
void dfs(int id){
	if(ans)return ;
	if(id==t){
		ans++;return;
	}
	int y = id%m, x = id/m;
	for(int i=0;i<=1;i++){
		int tx = x+dir[i][0];
		int ty = y+dir[i][1];
		if(tx>=n||ty>=m||vis[tx*m+ty])continue;
		vis[tx*m+ty] = 1;
		dfs(tx*m+ty); 
		if(ans)return;
	}
}
int main()
{
	scanf("%d %d",&n,&m);
	for(int i=0;i<n;i++){
		scanf("%s",mp+i*m);
		for(int j=i*m;j<(i+1)*m;j++){
			if(mp[j]=='#')vis[j] = 1;
		}
	}
	s = 0,t = n*m-1;
	vis[s] = 1;	vis[t] = 0;
	dfs(s);
	if(!ans){
		printf("0\n");
		return 0;
	}
	vis[s] = 1;	vis[t] = 0;
	ans = 0;
	dfs(s);
	if(ans){
		printf("2\n");
	}else printf("1\n");
	return 0;
} 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年09月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档