鱼C论坛

 找回密码
 立即注册
查看: 1364|回复: 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:打印
#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;
}
想知道小甲鱼最近在做啥?请访问 -> 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-10-6 05:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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