天生棋局(堆上申请二维空间的应用)
1 #include <stdio.h> 2 #include <stdlib.h> 3 /* 4 天生棋局 5 */ 6 #define N 10 7 //1.传入一个n在堆空间中产生n*n方格的棋盘(生成一个n*n的二维空间) 8 int **createboard(int n) 9 { 10 int **p = (int **)malloc(n*sizeof(int*)); 11 for(int i = 0;i<n;i++) 12 { 13 p[i] = (int *)malloc(n*sizeof(int)); 14 } 15 16 return p; 17 } 18 //2.N颗棋子随机落在棋盘上<需要防止落在同一位置上> 19 void initboard(int **p,int n) 20 { 21 int i,j; 22 23 i = rand()%N; 24 j = rand()%N; 25 p[i][j] = 'x'; 26 n -= 1; 27 while(n--) 28 { 29 30 i = rand()%N; 31 j = rand()%N; 32 while(p[i][j] == 'x') 33 { 34 i = rand()%N; 35 j = rand()%N; 36 } 37 p[i][j] = 'x'; 38 } 39 } 40 //3.打印棋盘,没旗子的用o表示,有棋子的用X表示 41 void printboard(int **p) 42 { 43 int i,j; 44 45 for(i = 0;i<N;i++) 46 { 47 for(j = 0;j<N;j++) 48 { 49 if(p[i][j] == 'x') 50 printf("%c\t",p[i][j]); 51 else 52 printf("%c\t",'o'); 53 } 54 putchar(10); 55 } 56 } 57 int main(void) 58 { 59 int ** p = createboard(N);//生成N*N二维空间 60 initboard(p,20);//随机放入20个棋子 61 printboard(p);//打印棋盘 62 63 return 0; 64 }