求水洼数

求水洼数


题目要求

小明家的前面有一个坪,但是这个坪不平整,下雨后,就会有水洼,水坑​

			{1,1,0,1},
		    {1,0,1,0},
		    {1,0,0,0},
		    {0,1,0,0}

​ 1表示此处有水,0表示此处没水,一个点的水会和周围其他的水连成一个大水洼,最后求水洼数


一、创建一个更大数组来解决边界问题

	//当前的积水情况
	int a[][4]={{1,1,0,1},
			    {1,0,1,0},
			    {1,0,0,0},
			    {0,1,0,0}};
	//把当前的数组放进一个更大的数组且边界置为0
	int b[6][6]={0};
	for(int i=1;i<6;i++)
		for(int j=1;j<6;j++)
		{
			b[i][j]=a[i-1][j-1];
		}

二、遍历更大的那个数组中代表有水洼的元素

int water_sum(int a[6][6])
{		
		int sum=0;
		int m,n;
	for(m=1;m<5;m++)
	{
		for(n=1;n<5;n++)
		{
			if(a[m][n]==1)
			{	
				sum++;
				water(a,m,n);	
			}
		}
	}

三、递归遍历已经找的的水洼附近的水洼并把水洼置位0

void water(int a[6][6],int i,int j)
{
	if(a[i][j]==1)
	{
		a[i][j]=0;
		water(a,i+1,j);
		water(a,i-1,j);
		water(a,i,j+1);
		water(a,i,j-1);
	}


}
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个用C语言编写的程序,用于计算给定矩阵中的水洼量: ```c #include <stdio.h> #define MAX_ROWS 100 #define MAX_COLS 100 int isSafe(int mat[][MAX_COLS], int visited[][MAX_COLS], int row, int col, int rows, int cols) { return (row >= 0) && (row < rows) && (col >= 0) && (col < cols) && (mat[row][col] && !visited[row][col]); } void DFS(int mat[][MAX_COLS], int visited[][MAX_COLS], int row, int col, int rows, int cols) { static int rowNbr[] = {-1, -1, -1, 0, 0, 1, 1, 1}; static int colNbr[] = {-1, 0, 1, -1, 1, -1, 0, 1}; visited[row][col] = 1; for(int k = 0; k < 8; ++k) { if(isSafe(mat, visited, row + rowNbr[k], col + colNbr[k], rows, cols)) { DFS(mat, visited, row + rowNbr[k], col + colNbr[k], rows, cols); } } } int countWaterPonds(int mat[][MAX_COLS], int rows, int cols) { int visited[MAX_ROWS][MAX_COLS]; for(int i = 0; i < rows; ++i) { for(int j = 0; j < cols; ++j) { visited[i][j] = 0; } } int count = 0; for(int i = 0; i < rows; ++i) { for(int j = 0; j < cols; ++j) { if(mat[i][j] && !visited[i][j]) { DFS(mat, visited, i, j, rows, cols); count++; } } } return count; } int main() { int mat[MAX_ROWS][MAX_COLS]; int rows, cols; printf("请输入矩阵的行和列:"); scanf("%d %d", &rows, &cols); printf("请输入矩阵元素(1表示有水,0表示没水):\n"); for(int i = 0; i < rows; ++i) { for(int j = 0; j < cols; ++j) { scanf("%d", &mat[i][j]); } } int result = countWaterPonds(mat, rows, cols); printf("水洼量为:%d\n", result); return 0; } ``` 该程序使用深度优先搜索(DFS)算法来查找水洼。首先,我们定义了一个`isSafe`函来判断给定位置是否是一个安全的位置,即是否在矩阵范围内且未被访问过且有水。然后,我们使用DFS函来遍历与给定位置相邻的所有位置,并标记已访问的位置。最后,我们在主函中遍历整个矩阵,对于每个未被访问过的有水位置,我们调用DFS函进行搜索,并将水洼量加一。最后输出水洼量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值