C语言统计二位随机地图的区域快数目
时间: 2023-11-15 14:32:17 浏览: 63
可以使用二维数组来存储地图,然后遍历数组统计每个区域的快的数目。具体的实现可以参考以下的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
// 定义地图大小和快的数目
int mapSize = 10;
int numBlocks = 20;
// 创建地图数组
int map[mapSize][mapSize];
// 初始化随机数生成器
srand((unsigned)time(NULL));
// 随机放置快
int count = 0;
while (count < numBlocks) {
int x = rand() % mapSize;
int y = rand() % mapSize;
if (map[x][y] == 0) {
map[x][y] = 1;
count++;
}
}
// 统计区域快的数目
int numAreas = 0;
for (int i = 0; i < mapSize; i++) {
for (int j = 0; j < mapSize; j++) {
if (map[i][j] == 1) {
// 找到新的快,开始统计新的区域
numAreas++;
int queueSize = 1;
int queue[mapSize * mapSize][2];
queue[0][0] = i;
queue[0][1] = j;
map[i][j] = 2; // 暂时将快标记为已访问
while (queueSize > 0) {
// 取出队首元素
int x = queue[0][0];
int y = queue[0][1];
queueSize--;
// 将周围未访问过的快加入队列
if (x > 0 && map[x - 1][y] == 1) {
queue[queueSize][0] = x - 1;
queue[queueSize][1] = y;
queueSize++;
map[x - 1][y] = 2;
}
if (x < mapSize - 1 && map[x + 1][y] == 1) {
queue[queueSize][0] = x + 1;
queue[queueSize][1] = y;
queueSize++;
map[x + 1][y] = 2;
}
if (y > 0 && map[x][y - 1] == 1) {
queue[queueSize][0] = x;
queue[queueSize][1] = y - 1;
queueSize++;
map[x][y - 1] = 2;
}
if (y < mapSize - 1 && map[x][y + 1] == 1) {
queue[queueSize][0] = x;
queue[queueSize][1] = y + 1;
queueSize++;
map[x][y + 1] = 2;
}
}
}
}
}
printf("快的数目:%d,区域数目:%d\n", numBlocks, numAreas);
return 0;
}
阅读全文