鱼C论坛

 找回密码
 立即注册
查看: 1752|回复: 1

我写的随机步法的代码

[复制链接]
发表于 2020-11-16 21:56:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这个是题目要求:
随机步法(Random Walk) 编写程序,⽣成⼀种贯穿10×10字符数组(初始时全为字符'.')的“随机步法”。程序必须随机地从⼀个元素“⾛到”另⼀个元素,每次都向上、向下、向左或向右移动⼀个元素位置。已访问过的元素按访问顺序⽤字⺟A到Z进⾏标记。

下⾯是⼀个输出示例:

A        .        .        .        .        .        .        .        .        .
B        C        D        .        .        .        .        .        .        .
.        F        E        .        .        .        .        .        .        .
H        G        .        .        .        .        .        .        .        .
I        .        .        .        .        .        .        .        .        .
J        .        .        .        .        .        .        .        Z        .
K        .        .        R        S        T        U        V        Y        .
L        M        P        Q        .        .        .        W        X        .
.        N        O        .        .        .        .        .        .        .
利⽤srand函数和rand函数(⻅程序deal.c)产⽣随机数,然后查看次数除以4的余数。余数⼀共有4种可能的值(0、1、2和3),指示下⼀次移动的4种可能⽅向。在执⾏移动之前,需要检查两项内容:⼀是不能⾛到数组外⾯,⼆是不能⾛到已有字⺟标记的位置。只要⼀个条件不满⾜,就得尝试换⼀个⽅向移动。如果4个⽅向都堵住了,程序就必须终⽌了。下⾯是提前结束的⼀个示例:

A        B        G        H        I        .        .        .        .        .
.        C        F        .        J        K        .        .        .        .
.        D        E        .        M        L        .        .        .        .
.        .        W        X        Y        P        Q        .        .        .
.        .        V        U        T        S        R        .        .        .
.        .        .        .        .        .        .        .        .        .
.        .        .        .        .        .        .        .        .        .
.        .        .        .        .        .        .        .        .        .
.        .        .        .        .        .        .        .        .        .
因为Y的4个⽅向都堵住了,所以没有地⽅可以放置下⼀步的Z了。


下面是我写的代码


  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>

  4. int main(){
  5.         char a[10][10];
  6.         int i,j,choice=0;
  7.         int w,h,x,num=0;
  8.        
  9.         for(i=0;i<10;i++){
  10.           for(j=0;j<10;j++)
  11.           a[i][j]='.';
  12.         }
  13.           
  14.         const char Alp[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N'
  15.         ,'O','P','Q','R','S','T','U','V','W','X','Y','Z'};
  16.        
  17.         w = 0;
  18.         h = 0;
  19.         a[w][h]=Alp[num];
  20.         num++;
  21.        
  22.         while((num<26)&&(choice<4)){
  23.                 srand((unsigned)time(NULL));
  24.                 x = rand()%3;
  25.                
  26.                 /*up*/
  27.                 if(x==0){
  28.                         if((a[w-1][h]=='.')&&(w-1)>=0){
  29.                         w-=1;
  30.                         a[w][h]=Alp[num];
  31.                         num++;
  32.                         choice=0;
  33.                         }
  34.                         else
  35.                         choice++;
  36.                            }
  37.                 /*down*/       
  38.    else if(x==1){
  39.                    if((a[w+1][h]=='.')&&(w+1)<10){
  40.                           w+=1;
  41.                           a[w][h]=Alp[num];
  42.                           num++;
  43.                           choice=0;
  44.             }
  45.             else
  46.             choice++;
  47.                   }
  48.         /*right*/
  49.    else if(x==2){
  50.                    if((a[w][h+1]=='.')&&(h+1)<10){
  51.                           h+=1;
  52.                           a[w][h]=Alp[num];
  53.                           num++;
  54.                           choice=0;
  55.             }
  56.             else
  57.                         choice++;
  58.                   }     
  59.                  /*left*/
  60.    else if(x==3){
  61.                    if((a[w-1][h]=='.')&&(w-1)>=0){
  62.                           w-=1;
  63.                           a[w][h]=Alp[num];
  64.                           num++;
  65.                           choice=0;
  66.                    }
  67.                    else
  68.                    choice++;
  69.                   }
  70.                   
  71.                    }
  72.    
  73.    for(i=0;i<10;i++){
  74.     for(j=0;j<10;j++){
  75.             printf("%c",a[i][j]);
  76.            
  77.     }
  78.     printf("\n");
  79.     }
  80.     return 0;
  81.    }
复制代码



不知道为什么运行结果只能朝一个方向移动,求助。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-17 08:45:35 | 显示全部楼层
srand((unsigned)time(NULL));
这个要放到循环外面

  1. srand((unsigned)time(NULL));
  2. while((num<26)&&(choice<4))
  3. {
  4.             x = rand()%3;
  5.             。。。
  6. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-7 23:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表