ali_ssssa 2024-11-15 15:20 采纳率: 7.7%
浏览 18

c语言 二维数组表示地图

【问题描述】二维数组常用来表示地图。实现一个函数,其原型为void travel(char map[10][10], int rand_seed)。其中map为10x10的地图,初始时所有元素值为'.'(表示该位置为空),rand_seed为生成随机数的种子。基于该地图,traval在map上的任意位置出发(该位置将被占用,标记为'A'),随机选择一个方向移动(4个方向 ,上、下,左、右,但要注意,不能移动到地图外面,也不能移动到已被占用的位置),并将新的位置标记为'B';持续移动,直至标记至'Z'或没有位置可移动;最终,类似下例输出map。注意:固定随机数种子为1024,选择方向是用0-3的随机数代表,0代表上,1代表下,2代表左,3代表右。

【输入形式】不需要输入

【思路提示】

首先随机选择一个起始位点的坐标

然后随机选择4个移动方向中的一个,即随机生成0-3的随机数,0代表上,1代表下,2代表左,3代表右

如果选择的方向可移动,则更新map后回到步骤2

如果选择的方向不可移动,则直接回到步骤2

如果所有的方向都不可移动,则跳出循环

  • 写回答

2条回答 默认 最新

  • 趣享先生 优质创作者: 编程框架技术领域 2024-11-15 15:24
    关注

    该回答参考ChatGPT,由吾为汝整理提供如若有用,还请题主采纳!

    为了实现您所描述的功能,我们可以编写一个C语言程序,其中包含一个函数 travel,该函数将根据给定的随机种子在一个10x10的二维数组地图上进行随机移动。以下是完整的代码示例:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define MAP_SIZE 10
    
    void printMap(char map[MAP_SIZE][MAP_SIZE]) {
        for (int i = 0; i < MAP_SIZE; i++) {
            for (int j = 0; j < MAP_SIZE; j++) {
                printf("%c ", map[i][j]);
            }
            printf("\n");
        }
    }
    
    void travel(char map[MAP_SIZE][MAP_SIZE], int rand_seed) {
        // 设置随机种子
        srand(rand_seed);
        
        // 初始化地图
        for (int i = 0; i < MAP_SIZE; i++) {
            for (int j = 0; j < MAP_SIZE; j++) {
                map[i][j] = '.'; // 所有元素初始化为'.'
            }
        }
    
        // 随机选择起始位置
        int startX = rand() % MAP_SIZE;
        int startY = rand() % MAP_SIZE;
        map[startX][startY] = 'A'; // 标记起始位置为'A'
    
        // 定义移动方向:上、下、左、右
        int directions[4][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} }; // (dx, dy)
        char currentMark = 'B'; // 从'B'开始标记
    
        int x = startX;
        int y = startY;
    
        while (currentMark <= 'Z') {
            // 随机选择一个方向
            int dir = rand() % 4;
            int newX = x + directions[dir][0];
            int newY = y + directions[dir][1];
    
            // 检查新位置是否在地图内且未被占用
            if (newX >= 0 && newX < MAP_SIZE && newY >= 0 && newY < MAP_SIZE && map[newX][newY] == '.') {
                // 更新当前位置
                x = newX;
                y = newY;
                map[x][y] = currentMark; // 标记新位置
                currentMark++; // 更新标记字符
            }
            // 如果所有方向都不可移动,循环将继续
        }
    }
    
    int main() {
        char map[MAP_SIZE][MAP_SIZE];
        int rand_seed = 1024; // 固定随机种子
    
        travel(map, rand_seed);
        printMap(map); // 打印最终地图
    
        return 0;
    }
    

    代码说明

    1. 初始化地图travel 函数首先将地图的所有元素初始化为 '.'
    2. 随机选择起始位置:使用 rand() 函数生成一个随机的起始坐标,并将该位置标记为 'A'
    3. 定义移动方向:使用一个二维数组 directions 来表示四个可能的移动方向。
    4. 移动逻辑:在一个 while 循环中,随机选择一个方向并计算新的坐标。如果新的坐标在地图范围内且未被占用,则更新当前位置并标记为当前字符(从 'B' 开始)。
    5. 打印地图printMap 函数用于输出最终的地图状态。

    注意事项

    • 该程序使用固定的随机种子 1024,确保每次运行时生成相同的随机序列。
    • 该程序会在地图上进行随机移动,直到标记到 'Z' 或者没有可移动的位置。

    您可以将此代码复制到C语言编译器中进行测试和运行。

    评论

报告相同问题?

问题事件

  • 创建了问题 11月15日