华为机试(岛屿的个数)C语言

该博客主要介绍了如何使用C语言解决计算二维网格中岛屿数量的问题。难点包括手动输入二维数组、将数组传入函数以及实现深度优先遍历算法。博主提醒要注意二维数组的创建、传递和深度优先遍历的实现。
摘要由CSDN通过智能技术生成

题目描述:
给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。要求可以持续的工作

输入:

5 5
11110
11010
11000
00000

输出: 1

难点1:手动输入二维数组,并将二维数组传入函数中。

//从键盘输入一个二维数组;
	int row,col;
	while(scanf("%d%d",&row,&col)!=EOF){
		if(row==0||col==0){
			break;
		}
		int land[row][col];
		int *a[col];
		for(int i=0;i<row;i++){
			for(int j=0;j<col;j++){
				scanf("%d",&land[i][j]);
			}
		}
		//a[0]=&land[0][0];
		for(int i=0;i<row;i++){
			a[i]=land[i];
		}

难点2:深度优先遍历,遍历1,遍历过后将1置为0

void DFS(int **tmp,int row,int col,int m,int n){
	tmp[row][col]=0;
	if(row-1>=0&&tmp[row-1][col]==1){
		DFS(tmp,row-1,col,m,n);
	}
	if(
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值