|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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了。
下面是我写的代码
- #include<stdio.h>
- #include<stdlib.h>
- #include<time.h>
- int main(){
- char a[10][10];
- int i,j,choice=0;
- int w,h,x,num=0;
-
- for(i=0;i<10;i++){
- for(j=0;j<10;j++)
- a[i][j]='.';
- }
-
- const char Alp[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N'
- ,'O','P','Q','R','S','T','U','V','W','X','Y','Z'};
-
- w = 0;
- h = 0;
- a[w][h]=Alp[num];
- num++;
-
- while((num<26)&&(choice<4)){
- srand((unsigned)time(NULL));
- x = rand()%3;
-
- /*up*/
- if(x==0){
- if((a[w-1][h]=='.')&&(w-1)>=0){
- w-=1;
- a[w][h]=Alp[num];
- num++;
- choice=0;
- }
- else
- choice++;
- }
- /*down*/
- else if(x==1){
- if((a[w+1][h]=='.')&&(w+1)<10){
- w+=1;
- a[w][h]=Alp[num];
- num++;
- choice=0;
- }
- else
- choice++;
- }
- /*right*/
- else if(x==2){
- if((a[w][h+1]=='.')&&(h+1)<10){
- h+=1;
- a[w][h]=Alp[num];
- num++;
- choice=0;
- }
- else
- choice++;
- }
- /*left*/
- else if(x==3){
- if((a[w-1][h]=='.')&&(w-1)>=0){
- w-=1;
- a[w][h]=Alp[num];
- num++;
- choice=0;
- }
- else
- choice++;
- }
-
- }
-
- for(i=0;i<10;i++){
- for(j=0;j<10;j++){
- printf("%c",a[i][j]);
-
- }
- printf("\n");
- }
- return 0;
- }
复制代码
不知道为什么运行结果只能朝一个方向移动,求助。 |
|