在一个10*10的矩阵中,随机方向(向上,向下,向左,向右)走动,走过的用字符标记,不能重复,直到4个方向都堵住了,程序终止
1、Makefile文件
test9:mainTest8_9.o randGoSeries.o
gcc -o test9 mainTest8_9.o randGoSeries.o
mainTest8_9.o:mainTest8_9.c randGoSeries.h
gcc -c mainTest8_9.c
randGoSeries.o:randGoSeries.c randGoSeries.h
gcc -c randGoSeries.c
2、随机走法的头文件和源文件
头文件
#include <stdio.h>
#include <time.h>
#define ANUM 10
#define DNUM 4
void initial(char series[][ANUM]);
void displaySeries(char series[ANUM][ANUM]);
int randDiret(void);
int isMove(char series[][ANUM], int row, int col, int *diret);
void move(char series[][ANUM], int *row, int *col, int diret);
源文件
#include "randGoSeries.h"
/*Name: initial
* Description: use '.' initilized series[][]
*/
void initial(char series[][ANUM])
{
int i,j;
for(i = 0; i < ANUM; ++i)
{
for(j = 0; j < ANUM; ++j)
{
series[i][j] = '.';
}
}
}
/* Name: displaySeries
* Description: display elements in series[][]
* */
void displaySeries(char series[][ANUM])
{
int i,j;
for(i = 0; i < ANUM; ++i)
{
for(j = 0; j < ANUM; ++j)
{
printf("%2c",series[i][j]);
}
printf("\n");
}
}
/* Name: randDiret
* Description: generate random direction,return direction(0=left,1=up,2=down,3=right)
*/
int randDiret(void)
{
return rand() % 4;
}
/* Name: isMove
* Description: judge move node at direction,return (1=move,0=no move)
*/
int isMove(char series[][ANUM], int row, int col, int *diret)
{
int i;
for(i = 0; i < DNUM; ++i)
{
switch(*diret)
{
case 0:
if(col != 0 && series[row][col - 1] == '.')
return 1;
else
*diret = (*diret + 1) % DNUM;
break;
case 1:
if(row != 0 && series[row - 1][col] == '.')
return 1;
else
*diret = (*diret + 1) % DNUM;
break;
case 2:
if(row != ANUM - 1 && series[row + 1][col] == '.')
return 1;
else
*diret = (*diret + 1) % DNUM;
break;
case 3:
if(col != ANUM - 1 && series[row][col + 1] == '.')
return 1;
else
*diret = (*diret + 1) % DNUM;
break;
}
}
return 0;
}
/* Name: move
* Description: to move node[row][col] by direction
*/
void move(char series[][ANUM], int *row, int *col, int diret)
{
switch(diret)
{
case 0:
*col -= 1;
break;
case 1:
*row -= 1;
break;
case 2:
*row += 1;
break;
case 3:
*col += 1;
break;
}
}
3、main函数
//Author: stone
#include "randGoSeries.h"
int main(void)
{
char series[ANUM][ANUM], ch;
int diret, row = 0, col = 0;
//initilized series[][] and ch
initial(series);
ch = 'A';
srand((unsigned)time(NULL)); //initilized random seed by now time
for(;;)
{
series[row][col] = ch;
diret = randDiret(); //generate random direction
if(isMove(series, row, col, &diret))
move(series, &row, &col, diret);
else
break;
ch = 'A' + (ch - 'A' + 1) % 26; //repeat A..Z alpha
}
printf("the last ch is %c\n",ch); //display the last alpha
displaySeries(series);
return 0;
}