用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函数后就没有了,并且中文也输出是乱码不知道是不是程序的问题