题目1448:Legal or Not

拓扑排序的题目 只要数组就可解决


#include <stdio.h>

#include <string.h>




int main()
{
int N,M,v[101][101]={0},x,y,b,i,j,k,sum,t,record[101]={0},size;


while(scanf("%d %d",&N,&M)!=EOF)
{
if(N==0&&M==0) break;


memset(record,0,101);


for(i=0;i<N;i++)
for(j=0;j<N;j++)
v[i][j]=0;


for(int i=0;i<M;i++)
{
scanf("%d %d",&x,&y);


v[x][y]=1;
}


k=N;
size=0;


while(k>0)
{
for(j=0;j<N;j++)
{
sum=0;
for(i=0;i<N;i++)
{
sum+=v[i][j];


}


if(sum==0) 
{
b=0;


for(i=0;i<size;i++)
if(record[i]==j) 
b++;


                    if(b==0)
{
t=j;
record[size++]=t;
   //printf("节点: %d\n",t);
   break;
}
}
}


for(j=0;j<N;j++)
v[t][j]=0;         //清零




k--;
}


//for(i=0;i<size;i++)
//printf("%d ",record[i]);


if(size==N)
printf("YES\n");


else
printf("NO\n");




}


return 0;


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值