|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
今天在做快速排序课后作业第一题皇后排序,我知道是有课后答案,但我不想照着抄一遍完事儿。我自己设计的代码在语法检验无误后无法执行,麻烦大佬能帮忙看看问题在起哪儿
我的设计思路如下;
1:建立一个8*8的数组,然后按1-64填充
2:用随机数选点,把选到的点置为0,然后将同一行同一列同一对角线的元素也置0;
3:然后在剩下非0的元素内选点,重复上述过程
4:找到一个完整的皇后数组后,对其中的元素进行排序(因为按1-64填充,排序完后进行对比防止重复)
5;创建一个用来存储得到的皇后排序的[128][8]的大数组,将排序完后的数列存放进去
6;重复上述过程
7:打印
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- int number;
- void bubble_sort(int array1[8], int str[128][8], int a, int array[8][8]);
- void queen_sort(int array[8][8], int str[128][8], int row, int col);
- void storage(int array1[8], int str[128][8], int array[8][8]);
- //用来存储找到的皇后排序
- void storage(int array1[8], int str[128][8], int array[8][8])
- {
- int i = 0, j = 0, k = 0;
- extern int number;
- for ( i = 0 ; i <= number ; i++ )
- {
- for ( j = 0 ; j < 8 ; j++ )
- {
- if ( str[i][j] == array1[j])
- {
- k++ ;
- if ( k == 8)
- {
- queen_sort(array, str, 8, 8);
- }
- }
- else
- {
- break;
- }
- }
- }
- for ( i = 0 ; i < 8 ; i++ )
- {
- str[number][i] = array1[i];
- }
- queen_sort(array, str, 8, 8);
- }
- //排序
- void bubble_sort(int array1[8], int str[128][8], int a, int array[8][8])
- {
- int aver, i, j = 0, k = a - 1, sum = 0;
- for (i = 0 ; i < a ; i++ )
- {
- sum += array1[i];
- }
- aver = sum / a ;
- int str1[a];
- for ( i = 0 ; i < a ; i++ )
- {
- if(array1[i] <= aver)
- {
- str1[j++] = array1[i];
- }
- else
- {
- str1[k--] = array1[i];
- }
- }
- sum = a / 2 ;
- while (sum--)
- {
- for ( i = 0 ; i < a - 1 ; i++ )
- {
- if(str1[i] <= str1[i + 1])
- {
- ;
- }
- else
- {
- aver = str1[i];
- str1[i] = str1[i + 1];
- str1[i + 1] = aver ;
- }
- }
- }
- for ( i = 0 ; i < a ; i++ )
- {
- array1[i] = str1[i];
- }
- storage(array1, str, array);
- }
- //找可能的排列方式
- void queen_sort(int array[8][8], int str[128][8], int row, int col)
- {
- int i, j, k = 1, num = 0 ;
- int array1[8] = {0};
- for ( i = 0 ; i < row ; i++ )
- {
- for ( j = 0 ; j < col ; j++ )
- {
- array[i][j] = k++ ;
- }
- }
- srand((unsigned)time(NULL)) ;
- while (array1[7] == 0)
- {
- i = rand() % 8;
- j = rand() % 8;
- if (array[i][j] != 0)
- {
- array1[num++] = array[i][j];
- for (k = 0 ; k < col ; k++ )
- {
- array[i][k] = 0;
- array[k][j] = 0;
- array[++i][++j] = 0;
- array[--i][--j] = 0;
- array[--i][++j] = 0;
- array[++i][--j] = 0;
- }
- }
- }
- bubble_sort(array1, str, 8, array);
- }
- int main(void)
- {
- int array[8][8];
- int i, j;
- extern int number ;
- int str[128][8] = {0};
- queen_sort(array, str, 8, 8);
- for ( i = 0 ; i <= number ; i++ )
- {
- for ( j = 0 ; j < 8 ; j++ )
- {
- printf("%d ", str[i][j]);
- }
- printf("\n");
- }
- return 0;
- }
复制代码 |
|