首页 > 其他分享 >AcWing 1113. 红与黑

AcWing 1113. 红与黑

时间:2022-10-29 23:15:37浏览次数:58  
标签:cnt int 红与黑 dfs st ++ 1113 include AcWing

蒟蒻只会暴搜了
要点是先找到起点,从起点开始向各个方向搜
DFS:
(DFS当然也可以用for(int i=0;i,4;i++)来搜索四个方向,这里是个人习惯)

#include<iostream>
#include<cstring>
using namespace std;
const int N=30;
char map[N][N];
int n,m,cnt=1;
int flagx,flagy;
void dfs(int x,int y)
{
	if(x<0 || x>=n || y<0 || y>=m || map[x][y]=='#') return;
	if(map[x][y]=='.')cnt++;
	map[x][y]='#';
	dfs(x+1,y),dfs(x-1,y),dfs(x,y+1),dfs(x,y-1);
}

void find()
{
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
			if(map[i][j]=='@')
			{
				flagx=i,flagy=j;
				return;
			}
	}
}

int main()
{
	while(scanf("%d%d",&m,&n)!=EOF && m!=0 || n!=0)
	{
		cnt=0;
		for(int i=0;i<n;i++) scanf("%s",map[i]);
		find();
		dfs(flagx,flagy);
		cout<< cnt <<endl;
	}
	return 0;
}

BFS:

#include<iostream>
#include<cstring>
#include<queue>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
const int N = 30;
char g[N][N];
int n, m;
int flagx, flagy;
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
bool st[N][N];
int bfs(int x, int y)
{
	int cnt=1;
	queue<PII>q;
	q.push({x,y});
	while(q.size())
	{
		PII t = q.front();
		q.pop();
		for(int i=0;i<4;i++)
		{
			int a=x+dx[i],b=y+dy[i];
			if(a<0 || a>=n || b<0 || b>=m)continue;//出界
			if(st[a][b])continue;//遍历过
			if(g[a][b] == '#')continue;//不可走
			q.push({a,b});
			st[a][b]=true;
			cnt++;
		}
	}
	return cnt;
}
void find()
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
			if (g[i][j] == '@')
			{
				flagx = i, flagy = j;
				return;
			}
	}
}
int main()
{
	while (cin >> m >> n && n || m)
	{
		memset(st, 0, sizeof st);
		for (int i = 0; i < n; i++) scanf("%s", g[i]);
		find();
		cout << bfs(flagx, flagy) << endl;
	}
	return 0;
}

 

标签:cnt,int,红与黑,dfs,st,++,1113,include,AcWing
From: https://www.cnblogs.com/lxl-233/p/16839454.html

相关文章

  • 803. 区间合并Acwing
    #include<iostream>#include<algorithm>#include<vector>usingnamespacestd;intn;intl,r;typedefpair<int,int>PII;vector<PII>ses;voidm(vector<PII>&segs......
  • 801. 二进制中1的个数Acwing
    #include<iostream>usingnamespacestd;constintN=1e5+10;intq[N];intlow(intx){returnx&(-x);}intmain(){intn;cin>>n;for(inti=0;......
  • 802. 区间和Acwing
    #include<iostream>#include<vector>#include<algorithm>usingnamespacestd;typedefpair<int,int>PII2;vector<int>q;vector<PII2>PII,PII1;constintN=3e5+10......
  • 高精度HighAccuracy_acwing.cpp
    ​​​ 文章:    力扣模板:字符串相加-字符串相加-力扣(LeetCode)    acwing模板:常用代码模板1——基础算法-AcWing 例题:        P100......
  • AcWing 93. 递归实现组合型枚举
    #include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constintN=30;//多开几个,防止边界越界intn,m;intway[N];//表示方案//......
  • AcWing 94. 递归实现排列型枚举
    #include<iostream>#include<cstring>#include<cstdio>#include<algorithm>usingnamespacestd;constintN=10;intn;intpath[N];//0表示没有放数,1-n表示......
  • AcWing 92. 递归实现指数型枚举
    题解1:#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constintN=16;intn;boolst[N];//false不选,true选voiddfs(intu){......
  • AcWing1069.凸多边形的划分(区间DP)
    SLOJP2067.三角剖分问题AcWing1069.凸多边形的划分(区间DP)题目描述给定由N顶点组成的凸多边形每个顶点具有权值将凸N边形剖分成N-2个三角形求N-2个三角形......
  • Acwing 4708 . 立方体(三维bfs)
    https://www.acwing.com/problem/content/4711/题目没什么难度,但是就是三维有些东西不经常定义记不住。写个题解记录一下吧Acwing1096.地牢大师https://www.acwing.co......
  • ACWing 3549 -- dp&&滚动数组
    题目描述最长非递减子序列思路Reference代码......