贯穿10*10数组的随机步
2016-03-09 14:29
239 查看
#include<stdio.h> #include<stdlib.h> #include<time.h> #define N 10 //定义地图 10*10 #define NUM_direction 4 // 4个方向 #define TRUE 1 #define FALSE 0 void answer(); int Is_over(int i, int j); //越界判断 void move(int * i, int * j, int direction); //移动 int Test_direction(int a[], int n); //判断4个方向是否都不通 int main() { answer(); fflush(stdin); getchar(); return 0; } void answer() { char all ; int flag_direction[NUM_direction]={0}; //1表示不通 int cur_i=0,cur_j=0; //cur_i是行,cur_j是列,{0,0}是入口 int pre_i,pre_j; int cur_direction; //每次随机产生的方向 char cur_step='A'; //初始步是‘A’ int i,j; for(i=0;i<N;++i) { for(j=0;j<N;++j) { all[i][j]='*'; } } all[0][0]=cur_step; srand((unsigned) time(NULL)); while(Test_direction(flag_direction, NUM_direction) && 'Z'!=cur_step) { //不是最后一步,也不是4个方向都不通 cur_direction= rand()%4; if(flag_direction[cur_direction]) { continue; } pre_i=cur_i; pre_j=cur_j; move(&cur_i,&cur_j,cur_direction); //先走再判断,如果不合格则后退 if(Is_over(cur_i,cur_j) || '*'!=all[cur_i][cur_j] ) { //是边界 或者 已经走过 flag_direction[cur_direction]=1; //标识此方向不通 cur_i=pre_i; //后退一步 cur_j=pre_j; continue; } cur_step++; //前进一步 all[cur_i][cur_j]=(char) cur_step; for(i=0;i<NUM_direction;++i) { flag_direction[i]=0; } } for(i=0;i<N;++i) { for(j=0;j<N;++j) { printf("%c ",all[i][j]); } printf("\n"); } } int Is_over(int i ,int j) { //是否越界 if(i>=0 && i<N && j>=0 && j<N ) { return FALSE; } else { return TRUE; } } void move (int * i, int * j, int direction) { if(0==direction) { //向上 *i=*i -1; } else if(2==direction) { //向下 *i=*i +1; } else if(1==direction) { //向右 *j=*j+1; } else if (3==direction) { //向左 *j=*j-1; } } int Test_direction(int a[], int n) { int i; int sum=0; for(i=0;i<n;++i) { sum+=a[i]; } return sum==4 ? FALSE:TRUE; }
相关文章推荐
- 删除Linux系统下history记录的方法
- openssh update
- 找出四位数的吸血鬼数字:类似1260=21*60
- secureCRT命令
- Codeforces 650B Image Preview 【二分】
- 怎样显示MYSQL表的信息
- 语音增强算法研究系列(四):非平稳噪声消除
- 前端基础学习-css基础笔记
- online_judge_1513
- Java源码阅读之TreeMap
- 《iOS Human Interface Guidelines》——Scope Bar
- PopupWindow的使用和分析 弹出框的一种
- bzoj4385 Wilcze doły
- Git:错误:error:src refspec master does not match any
- Codeforces 650A Watchmen 【数学 + 二分】
- DP啊啊啊啊啊啊啊啊!
- opencv mat元素的遍历
- 人机对决 | 无论比赛结果如何,都是人类的胜利
- 236. Lowest Common Ancestor of a Binary Tree
- 程序猿如何应对工作中的烦恼