数据结构作业,求划分
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{
int first;
int rear;
int queuesize;
int num[10];
}squeue;
int initqueue(squeue *L)
{
L->first=L->rear=0;
L->queuesize=10;
}
int emptyqueue(squeue L)
{
if(L.first==L.rear)
return 0;
else
return 1;
}
int enqueue(squeue *L,int e)
{
if((L->rear+1)%L->queuesize==L->first)
return 0;
L->num[L->rear]=e;
L->rear=(L->rear+1)%L->queuesize;
return 1;
}
int dequeue(squeue *L)
{
if(L->first==L->rear)
return 0;
int e;
e=L->num[L->first];
L->first=(L->first+1)%L->queuesize;
return e;
}
int main()
{
int a[9][9]={0};
int b[10];
b[0]=1;b[1]=4;b[2]=8;
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(i!=j)
a[b[i]][b[j]]=1;
}
b[0]=1;b[1]=0;b[2]=5;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(i!=j)
a[b[i]][b[j]]=1;
}
b[0]=5;b[1]=6;b[2]=2;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(i!=j)
a[b[i]][b[j]]=1;
}
a[1][7]=a[7][1]=a[8][3]=a[3][8]=a[3][4]=a[4][3]=a[6][4]=a[4][6]=1;
squeue L;
initqueue(&L);
for(i=0;i<=8;i++)
enqueue(&L,i);
int range[10][10];
for(i=0;i<10;i++)
for(j=0;j<10;j++)
range[i][j]=-1;
int head;i=j=0;
while(emptyqueue(L))
{
head=dequeue(&L);
range[i][j]=head;
int n=L.first;int e;
int x=100000;
while(L.num[L.first]!=x&&L.first!=L.rear)
{
int t=0;
for(int obj=0;obj<=j;obj++)
{
if(a[L.num[n]][range[i][obj]]==0)
t=0;
else
{
t=1;break;}
}
if(t==0)
{
e=dequeue(&L); j++; range[i][j]=e; n=L.first;
}
else
{
e=dequeue(&L);
enqueue(&L,e);n=L.first;
if(x==100000)
x=e;
}
}
i++;j=0;
}
for(i=0;i<10;i++)
for(j=0;j<10;j++)
{
if(range[i][j]!=-1)
printf("%d ",range[i][j]);
if(j==9) printf("\n");
}
return 0;
}