关于判断一个无向图连通性的代码的正确性
  • 板块学术版
  • 楼主Limitless_lmw
  • 当前回复15
  • 已保存回复15
  • 发布时间2022/10/16 14:52
  • 上次更新2023/10/27 07:15:53
查看原帖
关于判断一个无向图连通性的代码的正确性
809765
Limitless_lmw楼主2022/10/16 14:52

第一行输入 nnmm,表示 nn 个点,mm 条边

接下来 mm 行,每行 uuvv ,表示 uuvv 之间有一条边。

n,m104n,m\le10^{4}

代码

#include <iostream>
#include <vector>
#include <cstring>
using namespace std;

int n,m;
vector<int> vec[1010];
bool vis[1010];

bool dfs(int now,int e){
	if(now==e) return true;
	else{
		if(vec[now].size()==0) return false;
		for(vector<int>::iterator it=vec[now].begin();it<vec[now].end();it++){
			if(vis[*it]) continue;
			vis[*it]=1;
			if(dfs(*it,e)) {vis[*it]=0; return true;}
			vis[*it]=0;
		}
	}
	return false;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie();
	cin>>n>>m;
	for(int i = 1; i<=n; i++) vec[i].clear();
	for(int i = 1; i<=m; i++){
		int u,v;
		cin>>u>>v;
		vec[u].push_back(v);
		vec[v].push_back(u);
	}
	for(int i = 1; i<=n; i++){
		if(!dfs(1,i)){
			cout<<"NO\n";
			return 0;
		}
	}
	cout<<"YES\n";
	return 0;
}

代码大概率是错的,求hack

2022/10/16 14:52
加载中...