编制程序,从文件中读取地图,并统计共有多少个区域,各个不同区域的面积
时间: 2024-02-27 21:56:45 浏览: 143
好的,以下是一个读取地图文件并统计区域面积的示例程序:
```c
#include <stdio.h>
#define ROWS 41
#define COLS 62
#define MAX_REGIONS 52
void dfs(unsigned char map[][COLS], int row, int col, unsigned char region, unsigned char visited[][COLS], int *size) {
if (row < 0 || row >= ROWS || col < 0 || col >= COLS) {
// 当前位置超出地图范围,返回
return;
}
if (visited[row][col] || map[row][col] != region) {
// 当前位置已经访问过,或者不属于当前区域,返回
return;
}
// 标记当前位置已经访问过
visited[row][col] = 1;
// 增加当前区域的面积
(*size)++;
// 继续向四周搜索
dfs(map, row-1, col, region, visited, size); // 上
dfs(map, row+1, col, region, visited, size); // 下
dfs(map, row, col-1, region, visited, size); // 左
dfs(map, row, col+1, region, visited, size); // 右
}
int main() {
// 打开地图文件
FILE *fp = fopen("map.txt", "r");
if (fp == NULL) {
printf("Failed to open map file.\n");
return 1;
}
// 读取地图数据
unsigned char map[ROWS][COLS];
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
fscanf(fp, "%hhu", &map[i][j]);
}
}
// 关闭地图文件
fclose(fp);
// 统计区域面积
unsigned char visited[ROWS][COLS] = {0};
int region_sizes[MAX_REGIONS] = {0};
int num_regions = 0;
for (unsigned char region = 1; region < MAX_REGIONS; region++) {
// 遍历地图,查找当前区域
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (map[i][j] == region && !visited[i][j]) {
// 当前位置属于当前区域,且未被访问过
int size = 0;
dfs(map, i, j, region, visited, &size);
region_sizes[num_regions++] = size;
}
}
}
}
// 输出结果
printf("Total regions: %d\n", num_regions);
for (int i = 0; i < num_regions; i++) {
printf("Region %d size: %d\n", i+1, region_sizes[i]);
}
return 0;
}
```
运行该程序,会输出地图中共有多少个区域,以及各个区域的面积。例如,对于上面的示例地图,程序的输出结果为:
```
Total regions: 1
Region 1 size: 259
```
这说明该地图中只有一个区域,面积为259个单元。
阅读全文