Chinaunix首页 | 论坛 | 博客
  • 博客访问: 91061
  • 博文数量: 16
  • 博客积分: 367
  • 博客等级: 一等列兵
  • 技术积分: 245
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-25 22:37
文章分类

全部博文(16)

文章存档

2012年(4)

2011年(12)

我的朋友

分类: C/C++

2011-11-21 18:05:22

编写一个程序,生成一个贯穿10*10的字符数组(初始时全为字符‘.’)的“随机步法”,程序必须每次从一个元素走到另外一个元素,方向随机为前、后、左、右,元素按照访问顺序用字母AZ标记,如果其中某个元素前后左右都已经有字母标记,则停止。

 

下面是我写的程序,思路是用随机数控制方向

#include

#define N 10

#define UP 0

#define DOWN 1

#define LEFT 2

#define RIGHT 3

 

int main()

{

       char a[N][N] = {'0'};

       int i, j, dirc;

      

       srand((unsigned)time(NULL));

      

       printf("Program begins:\n");

      

/**************初始化数组************/

       for(i = 0; i < N; i++){

              for(j = 0; j < N; j++){

                     if(i == 0 && j == 0)

                            a[i][j] = 'A';

                     else

                            a[i][j] = '.';

              }

       }    

                    

       while(1){

              i = 0, j = 0;

              dirc = rand() % 4;//产生随机数,0=up,1=down,2=left,3=right

              if(dirc == RIGHT && a[i][j+1] == '.'){//处理向右移动的情况

                     a[i][j + 1] = a[i][j] + 1;

                     j = j + 1;

              }                  

              else if(dirc == LEFT && a[i][j-1] == '.'){//处理向左移动的情况

                     a[i][j-1] = a[i][j] + 1;

                     j = j - 1;

                            }

              else if(dirc == UP && a[i-1][j] == '.'){//处理向上移动的情况

                     a[i-1][j] = a[i][j] + 1;

                     i = i - 1;

              }

              else if(dirc == DOWN && a[i+1][j] == '.'){//处理向下移动的情况

                     a[i+1][j] = a[i][j] + 1;

                     i = i + 1;

              }

              if(a[i][j] == 'Z')//若循环到字母Z了,终止

                     break;

              else if(a[i+1][j] != '.' && a[i-1][j] != '.' && a[i][j+1] != '.' && a[i][j-1] != '.')//上下左右都不能走,终止

                     break;

       }

 /*********输出结果************/     

       for(i = 0; i < N; i++){

              for(j = 0; j < N; j++){

                     printf("%c ",a[i][j]);

                     if(j == 9)

                            printf("\n");   

              }

       }                  

 

}

 

可是程序在标记到字母B就终止了: ,测试分析了下,觉得是a[i][j]的位置,在每次移动时没有更新,但是看代码的逻辑觉得也没什么问题,请教大家帮忙看看到底是哪里的写法有问题?

阅读(1877) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

pzhenry2011-11-22 13:11:41

asdypf: while(1){ i = 0, j = 0;这一句有问题, i = 0, j = 0;应该放到括号外边.....
是有问题,谢谢指出!

asdypf2011-11-21 21:30:03

while(1){ i = 0, j = 0;这一句有问题, i = 0, j = 0;应该放到括号外边

sunny_piza2011-11-21 19:59:09

没有注释的代码很难看懂