C语言——随机步法设计——C语言程序设计现代方法习题
编写程序,生成一种贯穿10*10字符数组(初始时全为‘.’)的“随机步法”。程序必须随机地从一个元素“走到”另一个元素,每次都向上,向下,向左,或向右移动一个元素位置。已访问过的元素按访问顺序用字母A到Z进行标记。下面是输出示例:
下面为代码示例:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM_ROW 10
#define NUM_COL 10
int judge_walk[NUM_ROW][NUM_COL]={0}; // 初始化判断数组为假(0);
int num=0;
void generate_random_walk(char walk[NUM_ROW][NUM_COL]);
void print_walk(char walk[NUM_ROW][NUM_COL]);
int way(int row, int col);
int main(void)
{
char walk[NUM_ROW][NUM_COL];
srand(time(NULL));
generate_random_walk(walk);
return 0;
}
void generate_random_walk(char walk[NUM_ROW][NUM_COL]) // 生成随机步法;
{
int row, col, direction;
char ch='A';
for (row=0;row<NUM_ROW;row++)
for (col=0;col<NUM_COL;col++)
walk[row][col]='.';
row=rand()%NUM_ROW; // 随机初始位置;
col=rand()%NUM_COL;
walk[row][col]=ch++;
judge_walk[row][col]=1; // 初始位置;
num++;
while (ch<='Z')
{
if (way(row, col))
{
printf("-- No way out!!! --\n"); // 判断是否有路径,无则终止程序;
exit(0);
}
direction=rand()%4;
switch(direction)
{
case 0:
if (col<NUM_ROW-1) // 越界判断;
if (!judge_walk[row][col+1]) // 路径存在判断;
{
walk[row][++col]=ch++;
judge_walk[row][col]=1;
num++;
}
break;
case 1:
if (row<NUM_ROW-1)
if (!judge_walk[row+1][col])
{
walk[++row][col]=ch++;
judge_walk[row][col]=1;
num++;
}
break;
case 2:
if (col>0)
if (!judge_walk[row][col-1])
{
walk[row][--col]=ch++;
judge_walk[row][col]=1;
num++;
}
break;
case 3:
if (row>0)
if (!judge_walk[row-1][col])
{
walk[--row][col]=ch++;
judge_walk[row][col]=1;
num++;
}
break;
}
print_walk(walk); // 输出步法;
}
}
int way(int row, int col) // 判断路径函数;
{
if (col<9) // 越界判断;
if (!judge_walk[row][col+1])
return 0;
if (row<9)
if (!judge_walk[row+1][col])
return 0;
if (col>0)
if (!judge_walk[row][col-1])
return 0;
if (row>0)
if (!judge_walk[row-1][col])
return 0;
return 1;
}
void print_walk(char walk[NUM_ROW][NUM_COL]) // 输出函数;
{
int row, col;
system("cls");
printf("\n\n\n\n");
for (row=0;row<NUM_ROW;row++)
{
printf("\t\t\t\t\t"); // 居中显示;
for (col=0;col<NUM_COL;col++)
{
printf(" %c ", walk[row][col]); // 数组间距;
}
printf("\n");
}
printf("\n\t\t\t\t\t%d\n", num); // 到达num个字符;
}
学习C语言之路不易,希望大家互相交流,都有所收获!
参考文章:C语言随机步法——注视着