大一C语言总结贴(持更) Part 14 黑色瓷砖

【问题描述】

有一间长方形的房子,行数为m,列数为n,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。

【输入形式】

第一行输入了4个数字m,n,x,y,m是长方形的行数,n是长方形的列数,x是出发位置的行数,y是出发位置的列数

下面有m行输入,代表了这个地图,其中 1 表示红色,0 表示黑色

每行每个数字之间都会用空格隔开

其中,1 <= m, n <= 100,坐标(x, y)处一定是黑色的瓷砖

注:左上角坐标为(0, 0)


【输出形式】一个数字,代表能够到达多黑色的瓷砖的数目

【样例输入】

red.png

6 12 3 5

1 1 1 1 1 0 1 1 1 1 1 1

1 1 1 1 0 1 1 1 1 1 1 1

1 1 0 1 0 0 0 0 1 0 1 1

1 1 1 1 1 0 1 0 1 0 1 1

1 1 0 0 0 0 1 1 0 1 0 1

1 1 1 1 1 1 1 1 1 1 1 1

【样例输出】11
【样例说明】从(3,5)出发,能够到达的黑色瓷砖共 11 个

#include<stdio.h> 
int a[100][100];    //输入图像 
int book[100][100], m, n, sum;   //输入记录数组book,行m,列n,总数sum 

void dfs(int x, int y)		//定义深度优先搜索函数 
{
	int step[4][2] = { {0, 1},		//上 
					   {1, 0},		//右 
					   {0, -1},		//下 
					   {-1, 0} };	//左 
	int k, tx, ty;
	for (k = 0; k <= 3; k++)
	{
		tx = x + step[k][0];
		ty = y + step[k][1];			//记录移动后位置 
		if (tx < 0 || tx > m-1 || ty < 0 || ty > n-1)
			continue;     		//判断是否撞墙 
		if( a[tx][ty] == 0 && book[tx][ty] == 0)
		{
			sum++;			//记录可行格子 
			book[tx][ty] = -1;		//记为-1,视为走过 
			dfs(tx, ty);		//重复 
		}
	}
	return;
}

int main()
{
	int i, j, startx, starty;//输入循环辅助变量i,j; 初始位置 startx, starty
	scanf("%d %d %d %d", &m, &n, &startx, &starty);//行,列,初始位置读入 
	for (i = 0; i < m; i++)
	{
		for (j = 0; j < n; j++)
			scanf("%d", &a[i][j]);
	}
	book[startx][starty] = -1;//初始位置记为-1,视为走过
	sum = 1;   //记录可行格子 
	dfs(startx, starty);// 应用函数 
	printf("%d\n", sum);//输出 
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
大一C语言的必背知识点包括以下内容: 1. 数据类型:了解C语言的基本数据类型,包括整型、浮点型、字符型等,并了解它们的取值范围和存储大小。 2. 变量和常量:学会声明和定义变量,了解变量的作用域和生命周期。同时,了解常量的概念和使用方法。 3. 运算符:掌握C语言中的各种运算符,包括算术运算符、关系运算符、逻辑运算符等,并了解它们的优先级和结合性。 4. 控制语句:学会使用条件语句(if-else语句、switch语句)和循环语句(for循环、while循环、do-while循环)来控制程序的流程。 5. 数组:了解数组的概念和使用方法,包括一维数组和多维数组,并学会使用数组进行数据的存储和处理。 6. 函数:掌握函数的定义和调用,了解函数的参数传递和返回值,学会编写自定义函数来实现特定的功能。 7. 指针:理解指针的概念和使用方法,包括指针的声明、指针的运算和指针与数组的关系。 8. 结构体:了解结构体的概念和使用方法,学会定义和操作结构体变量,包括结构体的成员访问和结构体数组的使用。 9. 文件操作:学会使用C语言提供的文件操作函数来读写文件,包括打开文件、读取文件内容和写入文件内容等操作。 10. 动态内存分配:了解动态内存分配的概念和使用方法,学会使用malloc()和free()函数来进行内存的动态分配和释放。 以上是大一C语言的必背知识点,掌握了这些知识点可以帮助你好地理解和编写C语言程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值