社区讨论

WA求助,自己觉得思路真的没问题

P1506拯救oibh总部参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lozl5so8
此快照首次捕获于
2023/11/15 17:54
2 年前
此快照最后确认于
2023/11/15 19:47
2 年前
查看原帖
CPP
#include <stdio.h>
int x, y;
int map[505][505];
char ch;
int answer = 0;
void check_safe(int a,int b)
{
	map[a][b] = 1;
	//深搜 
	if(map[a-1][b] == 0)
	{
		check_safe(a-1,b);
	}
	if(map[a][b-1] == 0)
	{
		check_safe(a,b-1);
	}
	if(map[a+1][b] == 0)
	{
		check_safe(a+1,b);
	}
	if(map[a][b+1] == 0)
	{
		check_safe(a,b+1);
	}
	return;
}


void get_answer(int a,int b)
{
	if((a == 1 || a == x || b == 1 || b == y) && map[a][b] == 0)
		check_safe(a,b);
	return;
}

int main()
{
	scanf("%d%d",&x,&y);
	for(int i = 0;i <= y+1;i++)
	{
		map[0][i] = 1;
		map[x + 1][i] = 1;
	}
	for(int i = 0;i <= x+1;i++)
	{
		map[i][0] = 1;
		map[i][y + 1] = 1;
	}
	for(int i = 1;i <= x;i++)
	{
		for(int j = 1;j <= y;j++)
		{
			scanf("%c",&ch);
			if(ch == '0')
				map[i][j] = 0;
			if(ch == '*')
				map[i][j] = 1;
			if(ch == '\n')
				j--;
		}
	}
	for(int i = 1;i <= x;i++)
	{
		get_answer(i, 1);
		get_answer(i, y);			
	}
		for(int i = 1;i <= y;i++)
	{
		get_answer(1, i);
		get_answer(x, i);			
	}
	for(int i = 1;i <= x;i++)
	{
		for(int j = 1;j <= y;j++)
		{
			if(map[i][j] == 0)
				answer++;
		}
	}
	
	
	printf("%d",answer);
	
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...