例16/P-274 设有5位待业者,5项工作,他们各自能胜任 工作的情况如图8-47所示,要求设计一个就业方案,使尽量多的人能就业。

Code
#include "stdio.h"
int link[12][12]={};
int bfs()
{
int q[12]={},head,tail,visit[12]={},i,pa[12]={},min=32767,flag,p;
pa[0]=-1;
visit[0]=1;
head=0;tail=1;
while(tail!=head)
{
flag=0;
for(i=0;i<12;i++)
{
if(link[q[head]][i]==1&&visit[i]!=1)
{
visit[i]=1;
q[tail]=i;
pa[tail]=head;/*节点的父指针!*/
if(q[tail]==11){flag=1;break;}
tail++;
}
}
if(flag==1)break;
head++;
}
if(flag==0)return -1;
while(tail!=0)
{
p=pa[tail];
link[q[p]][q[tail]]--;
link[q[tail]][q[p]]++;
tail=p;
}
return 0;
}
int main()
{
int t1,t2,i,liu=0;
for(;;)
{
scanf("%d%d",&t1,&t2);
if(t1==-1)break;
link[t1][t2]=1;
}
for(i=1;i<=5;i++){link[0][i]=1;}
for(i=6;i<=10;i++){link[i][11]=1;}
while(bfs()!=-1){liu++;}
printf("%d",liu);
return 0;
}
posted @
2008-10-31 11:20
SЁv⑦ēЙ
阅读(
218)
评论()
收藏
举报