关于程序的疑问,求大佬解答
  • 板块学术版
  • 楼主cysxc11111
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/6/8 16:16
  • 上次更新2024/6/8 19:43:31
查看原帖
关于程序的疑问,求大佬解答
1126670
cysxc11111楼主2024/6/8 16:16

程序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 有什么区别吗?为什么两个代码提交结果不一样?

2024/6/8 16:16
加载中...