根据用户输入的行数和列数用C语言制作一张n*m含有k个障碍的地图,并放在数组中,写出代码
时间: 2023-09-13 13:05:22 浏览: 74
### 回答1:
您可以使用以下代码来制作n*m含有k个障碍的地图:// n代表行数,m代表列数,k代表障碍的数量
int n, m, k;
// 创建一个n*m的地图
int map[n][m];
// 用0和1表示地图的状态,0表示无障碍,1表示有障碍
for (int i=0; i<n ;i++)
for (int j=0; j<m ;j++)
map[i][j] = 0;
// 随机生成k个障碍
for (int i=0; i<k ;i++)
{
// 随机生成障碍的位置
int x = rand() % n;
int y = rand() % m;
// 将该位置的地图状态改为1
map[x][y] = 1;
}
### 回答2:
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, m, k;
printf("请输入行数n:");
scanf("%d", &n);
printf("请输入列数m:");
scanf("%d", &m);
printf("请输入障碍数k:");
scanf("%d", &k);
if (n <= 0 || m <= 0 || k < 0 || k >= n * m) {
printf("输入无效!\n");
return 0;
}
// 创建地图数组,将所有元素初始化为0
int map[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
map[i][j] = 0;
}
}
// 随机生成k个障碍物的位置
for (int i = 0; i < k; i++) {
int row, col;
do {
row = rand() % n;
col = rand() % m;
} while (map[row][col] == 1); // 如果该位置已经是障碍物,则重新生成位置
map[row][col] = 1; // 将该位置设置为障碍物
}
// 打印地图
printf("生成的地图为:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
printf("%d ", map[i][j]);
}
printf("\n");
}
return 0;
}
### 回答3:
下面是一个使用C语言编写的生成包含障碍物的地图的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void generateMap(int n, int m, int k, char map[n][m]) {
// 初始化地图
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
map[i][j] = '0';
}
}
// 设置随机数种子
srand(time(NULL));
// 随机生成障碍物
int count = 0;
while (count < k) {
int x = rand() % n;
int y = rand() % m;
if (map[x][y] == '0') {
map[x][y] = '1';
count++;
}
}
}
int main() {
int n, m, k;
printf("请输入地图的行数:");
scanf("%d", &n);
printf("请输入地图的列数:");
scanf("%d", &m);
printf("请输入障碍物的数量:");
scanf("%d", &k);
char map[n][m];
generateMap(n, m, k, map);
// 打印地图
printf("生成的地图如下:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
printf("%c ", map[i][j]);
}
printf("\n");
}
return 0;
}
```
用户可以通过输入地图的行数、列数和障碍物的数量来生成对应的地图。地图中的空格用`'0'`表示,障碍物用`'1'`表示。代码首先使用`generateMap`函数来生成地图,并将结果存储在二维字符数组`map`中。然后,使用两个嵌套循环遍历二维数组,将地图的内容打印出来。