weixin_67327476 2022-12-12 13:24 采纳率: 100%
浏览 33
已结题

划分子集问题(队列应用)

用c语言划分子集

没有结果输出,并且中文运行是乱码,之前都是正常的

#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define N 9
typedef int QueueElementType;
typedef struct
{
    QueueElementType element[N];
    int front;
    int rear;
}SeqQueue;
void InitQueue(SeqQueue *Q);
int EnterQueue(SeqQueue *Q,QueueElementType x);
int DeleteQueue(SeqQueue *Q,QueueElementType *x);
void DivideQueue(SeqQueue *Q,int R[N][N]);
int main()
{
    int R[9][9] =
    {
        0,1,0,0,0,0,0,0,0,
        1,0,0,0,1,1,0,1,1,
        0,0,0,0,0,1,1,0,0,
        0,0,0,0,1,0,0,0,1,
        0,1,0,1,0,1,1,0,1,
        0,1,1,0,1,0,1,0,0,
        0,0,1,0,1,1,0,0,0,
        0,1,0,0,0,0,0,0,0,
        0,1,0,1,1,0,0,0,0
    };
    SeqQueue *Q;
    InitQueue(Q);
    for(int i=0;i<9;i++)
        EnterQueue(Q,i+1);
    DivideQueue(Q,R);
    return 0;
}
void InitQueue(SeqQueue *Q)
{
        Q->front=Q->rear=0;
}
int EnterQueue(SeqQueue *Q,QueueElementType x)
{

    while((Q->rear)%N!=Q->front)
    {
        Q->element[Q->rear]=x;
        Q->rear=(Q->rear+1)%N;
        return TRUE;
    }
}
int DeleteQueue(SeqQueue *Q,QueueElementType *x)
{
    if(Q->front==Q->rear)
        return FALSE;
    *x=Q->element[Q->front];
    Q->front=(Q->front+1)%N;
    return TRUE;
}
void DivideQueue(SeqQueue *Q,int R[N][N])
{
    int result[9]={0};
    int Group = 0;
    int newr[9]={0};

    int Pre=Q->rear;
    int Cur;

    while(Q->front!=Q->rear)
    {
        Group+=1;

        for(int i=0;i<9;i++)    //取行数
        {
            newr[i]=R[Q->element[Q->front]][i];
        }

        while(Q->front!=Pre)        //划分子集
        {
            DeleteQueue(Q,&Cur);
            if(newr[Cur-1]==0)
            {
                result[Cur-1]=Group;
                for(int i=0;i<9;i++)
                    newr[i]+=R[Cur-1][i];
            }
            else
                EnterQueue(Q,Cur);
        }
        Pre=Q->rear;
    }
    //printf("划分子集:\n");
    for(int i=1;i<=Group;i++)       //输出子集
    {
       for(int q=0;q<9;q++)
       {
           if(result[q]==i)
                printf("%d ",Q->element[q]);
       }
       printf("\n");
    }
}



最开始有输出但是调了一下DividedQueue函数后就没有了,并且中文也输出是乱码不知道是不是程序的问题

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月20日
    • 创建了问题 12月12日

    悬赏问题

    • ¥200 csgo2的viewmatrix值是否还有别的获取方式
    • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
    • ¥15 请把下列每一行代码完整地读懂并注释出来
    • ¥15 pycharm运行main文件,显示没有conda环境
    • ¥15 易优eyoucms关于二级栏目调用的问题
    • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
    • ¥15 为什么eclipse不能再下载了?
    • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
    • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
    • ¥15 特定网页无法访问,已排除网页问题