| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
哪位大牛帮忙看看,延迟认可算法,为什么wa呀?#include <stdio.h>
#include <string.h>
#define N 30
#define Max 5000000
int mal[N][N], fem[N][N], fem_chose[N], mal_alone[N], n,Q[Max];
int hash[256];
char mrel[256], wrel[256], str[100];
void gale_shapley()
{
int head=0, tail=0, i, boy, girl, pre;
memset(fem_chose,-1,sizeof(fem_chose));
memset(mal_alone,0,sizeof(mal_alone));
for(i=1;i<=n;i++)
Q[++tail]=i;
while(head!=tail)
{
boy=Q[++head];
for(i=1;i<=n;i++)
{
girl=mal[boy][i];
if(fem[girl][boy]!=-1)
{
pre=fem_chose[girl];
if(pre==-1) //该女未订婚
{
fem_chose[girl]=boy;
mal_alone[boy]=girl;
break;
}
else if(fem[girl][boy]<fem[girl][pre]) ////该女为之悔婚
{
Q[++tail]=pre;
fem_chose[girl]=boy;
mal_alone[boy]=girl;
fem[girl][pre]=-1;
break;
}
else fem[girl][boy]=-1; ///该女拒绝之
}
}
}
}
int main()
{
int icase, i, j;
char ch;
scanf("%d",&icase);
while(icase--)
{
scanf("%d%*c",&n);
memset(hash,0,sizeof(hash));
for(i=1;i<=n;i++)
{
ch=getchar();
getchar();
hash[ch]=i;
mrel[i]=ch;
}
for(i=1;i<=n;i++)
{
ch=getchar();
hash[ch]=i;
wrel[i]=ch;
}
for(i=1;i<=n;i++)
{
scanf("%c:%s%*c",&ch,str);
for(j=1;j<=n;j++)
mal[hash[ch]][j]=hash[str[j-1]];
}
for(i=1;i<=n;i++)
{
getchar();
scanf("%c:%s%*c",&ch,str);
for(j=1;j<=n;j++)
fem[hash[ch]][j]=hash[str[j-1]];
}
gale_shapley();
for(i='a';i<='z';i++)
{
if(hash[i])
{
printf("%c %c\n",i,wrel[mal_alone[hash[i]]]);
}
}
printf("\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator