程序1:
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int e[N],ne[N],h[N],q[N],d[N],m,n,idx,al[N];
void add(int a,int b){
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
bool toposort(){
int hh=0,tt=-1;
for(int i=1;i<=n;i++)
if(!d[i]) q[++tt]=i;
while(hh<=tt){
int t=q[hh++];
for(int i=h[t];i!=-1;i=ne[i]){
d[e[i]]--;
if(!d[e[i]]) q[++tt]=e[i];
}
}
return tt==n-1;
}
int main(){
cin>>n>>m;
int a,b;
memset(h,-1,sizeof h);
for(int i=0;i<m;i++){
cin>>a>>b;
add(a,b);
d[b]++;
}
if(toposort()){
cout<<"loop not exist.\n";
for(int i=0;i<=n-1;i++) cout<<q[i]<<" ";
}
if(!toposort()) cout<<"loop exist.";
return 0;
}
程序2:
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int e[N],ne[N],h[N],q[N],d[N],m,n,idx,al[N];
void add(int a,int b){
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
bool toposort(){
int hh=0,tt=-1;
for(int i=1;i<=n;i++)
if(!d[i]) q[++tt]=i;
while(hh<=tt){
int t=q[hh++];
for(int i=h[t];i!=-1;i=ne[i]){
d[e[i]]--;
if(!d[e[i]]) q[++tt]=e[i];
}
}
return tt==n-1;
}
int main(){
cin>>n>>m;
int a,b;
memset(h,-1,sizeof h);
for(int i=0;i<m;i++){
cin>>a>>b;
add(a,b);
d[b]++;
}
if(toposort()){
cout<<"loop not exist.\n";
for(int i=0;i<=n-1;i++) cout<<q[i]<<" ";
}
else cout<<"loop exist.";
return 0;
}
请问 两个代码中 if(!toposort()) 和 else 有什么区别吗?为什么两个代码提交结果不一样?