数据结构作业之求划分

数据结构作业,求划分

#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; 
}
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值