鱼C论坛

 找回密码
 立即注册
查看: 1286|回复: 3

皇后排序代码设计完后执行显示段错误(吐核)

[复制链接]
发表于 2022-7-3 09:55:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天在做快速排序课后作业第一题皇后排序,我知道是有课后答案,但我不想照着抄一遍完事儿。我自己设计的代码在语法检验无误后无法执行,麻烦大佬能帮忙看看问题在起哪儿
我的设计思路如下;
1:建立一个8*8的数组,然后按1-64填充
2:用随机数选点,把选到的点置为0,然后将同一行同一列同一对角线的元素也置0;
3:然后在剩下非0的元素内选点,重复上述过程
4:找到一个完整的皇后数组后,对其中的元素进行排序(因为按1-64填充,排序完后进行对比防止重复)
5;创建一个用来存储得到的皇后排序的[128][8]的大数组,将排序完后的数列存放进去
6;重复上述过程
7:打印

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>

  4. int number;

  5. void bubble_sort(int array1[8], int str[128][8], int a, int array[8][8]);
  6. void queen_sort(int array[8][8], int str[128][8], int row, int col);
  7. void storage(int array1[8], int str[128][8], int array[8][8]);
  8. //用来存储找到的皇后排序
  9. void storage(int array1[8], int str[128][8], int array[8][8])
  10. {
  11.         int i = 0, j = 0, k = 0;
  12.         extern int number;

  13.         for ( i = 0 ; i <= number ; i++ )
  14.         {
  15.                 for ( j = 0 ; j < 8 ; j++ )
  16.                 {
  17.                         if ( str[i][j] == array1[j])
  18.                         {
  19.                                 k++ ;
  20.                                 if ( k == 8)
  21.                                 {
  22.                                         queen_sort(array, str, 8, 8);
  23.                                 }
  24.                         }
  25.                         else
  26.                         {
  27.                                 break;
  28.                         }
  29.                 }
  30.         }

  31.         for ( i = 0 ; i < 8 ; i++ )
  32.         {
  33.                 str[number][i] = array1[i];
  34.         }

  35.         queen_sort(array, str, 8, 8);
  36. }
  37. //排序
  38. void bubble_sort(int array1[8], int str[128][8], int a, int array[8][8])
  39. {
  40.         int aver, i, j = 0, k = a - 1, sum = 0;
  41.         for (i = 0 ; i < a ; i++ )
  42.         {
  43.                 sum += array1[i];
  44.         }
  45.         aver = sum / a ;

  46.         int str1[a];

  47.         for ( i = 0 ; i < a ; i++ )
  48.         {
  49.                 if(array1[i] <= aver)
  50.                 {
  51.                         str1[j++] = array1[i];
  52.                 }
  53.                 else
  54.                 {
  55.                         str1[k--] = array1[i];
  56.                 }
  57.         }

  58.         sum = a / 2 ;
  59.         while (sum--)
  60.         {
  61.                 for ( i = 0 ; i < a - 1 ; i++ )
  62.                 {
  63.                         if(str1[i] <= str1[i + 1])
  64.                         {
  65.                                 ;
  66.                         }
  67.                         else
  68.                         {
  69.                                 aver = str1[i];
  70.                                 str1[i] = str1[i + 1];
  71.                                 str1[i + 1] = aver ;

  72.                         }
  73.                 }
  74.         }

  75.         for ( i = 0 ; i < a ; i++ )
  76.         {
  77.                 array1[i] = str1[i];
  78.         }

  79.          storage(array1, str, array);
  80. }

  81. //找可能的排列方式
  82. void queen_sort(int array[8][8], int str[128][8], int row, int col)
  83. {
  84.         int i, j, k = 1, num = 0 ;
  85.         int array1[8] = {0};

  86.         for ( i = 0 ; i < row ; i++ )
  87.         {
  88.                 for ( j = 0 ; j < col ; j++ )
  89.                 {
  90.                         array[i][j] = k++ ;
  91.                 }
  92.         }

  93.         srand((unsigned)time(NULL)) ;

  94.         while (array1[7] == 0)
  95.         {
  96.                 i = rand() % 8;
  97.                 j = rand() % 8;
  98.                 if (array[i][j] != 0)
  99.                 {
  100.                         array1[num++] = array[i][j];
  101.                         for (k = 0 ; k < col ; k++ )
  102.                         {
  103.                                 array[i][k] = 0;
  104.                                 array[k][j] = 0;
  105.                                 array[++i][++j] = 0;
  106.                                 array[--i][--j] = 0;
  107.                                 array[--i][++j] = 0;
  108.                                 array[++i][--j] = 0;
  109.                         }
  110.                 }
  111.         }

  112.         bubble_sort(array1, str, 8, array);
  113. }

  114. int main(void)
  115. {
  116.         int array[8][8];
  117.         int i, j;
  118.         extern int number ;
  119.         int str[128][8] = {0};

  120.         queen_sort(array, str, 8, 8);

  121.         for ( i = 0 ; i <= number ; i++ )
  122.         {
  123.                 for ( j = 0 ; j < 8 ; j++ )
  124.                 {
  125.                         printf("%d ", str[i][j]);
  126.                 }
  127.                 printf("\n");
  128.         }

  129.         return 0;
  130. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-3 12:58:04 | 显示全部楼层
number = 0 ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-4 07:49:23 | 显示全部楼层

试了,没效果,它还是那么仍性
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-4 09:54:20 | 显示全部楼层
山小 发表于 2022-7-4 07:49
试了,没效果,它还是那么仍性

太任性了
你的思路中,第 4 点:对完整的皇后数组进行排序,是如何排序呢?毕竟这会影响每一行、每一列。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 15:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表