链式前向星复习图论

B3862 图的遍历(简单版) - 洛谷 | 计算机科学教育新生态

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 1e5+10;
int head[N];
int tot;
int n,m;
int pos;
bool vis[N];
struct Edge{
	int next;
	int to;
}e[N];
void init()
{
	for(int i = 1 ; i <= n ; i++)
	head[i] = -1;
}
void add(int u,int v)
{
	++tot;
	e[tot].next = head[u];
	e[tot].to = v;
	head[u] = tot;
}
void dfs(int current)
{
	if(current > pos)
	pos = current;
	int k = head[current];//取出连接第一条边的信息 

	while(k != -1)
	{
		int to = e[k].to;//指向的点
		int temp = head[to];//链表to点连接第一条边 
		if(vis[to] == false)
		{	
			vis[to] = true;
			dfs(to);
		}
		k = e[k].next;
	}
}
int main(void)
{
	cin >> n >> m;
	init();
	for(int i = 1 ; i <= m ; i++)
	{
		int u,v;
		cin >> u >> v;
		add(u,v);
	}
	for(int i = 1 ; i <= n ; i++)
	{
		memset(vis,false,sizeof(vis));
		vis[i] = true;
		pos = i;
		dfs(i);
		cout << pos << " "; 
	}
	return 0;
}

P3916 图的遍历 - 洛谷 | 计算机科学教育新生态

90分

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 1e5+10;
int head[N];
int tot;
int n,m;
int pos;
bool vis[N];
struct Edge{
	int next;
	int to;
}e[N];
void init()
{
	for(int i = 1 ; i <= n ; i++)
	head[i] = -1;
}
void add(int u,int v)
{
	++tot;
	e[tot].next = head[u];
	e[tot].to = v;
	head[u] = tot;
}
void dfs(int current)
{
	if(current > pos)
	pos = current;
	int k = head[current];//取出连接第一条边的信息 

	while(k != -1)
	{
		int to = e[k].to;//指向的点
		int temp = head[to];//链表to点连接第一条边 
		if(vis[to] == false)
		{	
			vis[to] = true;
			dfs(to);
		}
		k = e[k].next;
	}
}
int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	init();
	for(int i = 1 ; i <= m ; i++)
	{
		int u,v;
		cin >> u >> v;
		add(u,v);
	}
	for(int i = 1 ; i <= n ; i++)
	{
		memset(vis,false,sizeof(vis));
		vis[i] = true;
		pos = i;
		dfs(i);
		cout << pos << " "; 
	}
	return 0;
}

100分

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 1e5+10;
int head[N];
int tot;
int n,m;
int pos;
bool vis[N];
int ans[N];
struct Edge{
	int next;
	int to;
}e[N];
void init()
{
	for(int i = 1 ; i <= n ; i++)
	head[i] = -1;
}
void add(int u,int v)
{
	++tot;
	e[tot].next = head[u];
	e[tot].to = v;
	head[u] = tot;
}
void dfs(int current,int maxpos)
{
	if(vis[current] == false)
	ans[current] = maxpos;
	vis[current] = true;
	int k = head[current];
	while(k != -1)
	{
		int to = e[k].to;//指向的点
		int temp = head[to];//链表to点连接第一条边 
		if(vis[to] == false)
		{	
			ans[to] = maxpos;
			vis[to] = true;
			dfs(to,maxpos);
		}
		k = e[k].next;
	}
}
int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	init();
	for(int i = 1 ; i <= m ; i++)
	{
		int u,v;
		cin >> u >> v;
		add(v,u);//方向建立边 
	}
	for(int i = n ; i >= 1 ; i--)
	{
		dfs(i,i); 
	}
	for(int i = 1 ; i <= n ; i++)
	cout << ans[i] << " ";
	return 0;
}

P1700 [USACO19OPEN] Milk Factory B - 洛谷 | 计算机科学教育新生态

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 1e5+10;
int head[N];
int ans = 1e9;
int cnt;
int tot;
int n;
bool vis[N];
struct Edge{
	int next;
	int to;
}e[N];
bool found;
void add(int u,int v)
{
	tot++;
	e[tot].next = head[u];
	e[tot].to = v;
	head[u] = tot;
}
void dfs(int current)
{
	vis[current] = true;
	cnt++;
	int k = head[current];
	while(k != -1)
	{
		int to = e[k].to;
		if(vis[to] == false)
		{
			vis[to] = true;
			dfs(to);
		}
		k = e[k].next;
	}
}
int main(void)
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n;
	
	for(int i = 1 ; i <= n ; i++)
	head[i] = -1;
	
	for(int i = 1 ; i <= n-1 ; i++)
	{
		int u,v;
		cin >> u >> v;
		add(v,u);//反向建立边
	}
	for(int i = 1 ; i <= n ; i++)
	{
		cnt = 0;
		memset(vis,false,sizeof(vis));
		dfs(i);
		if(cnt == n)
		{
			found = true;
			ans = min(ans,i);
		}
	}
	if(found)
	cout << ans;
	else
	cout << -1;
	return 0;
}
相关推荐
中东大鹅37 分钟前
【排序算法】选择排序
数据结构·算法·排序算法
九亿AI算法优化工作室&1 小时前
【SOC估计】基于扩展卡尔曼滤波器实现锂离子电池充电状态估计matlab代码和报告
开发语言·人工智能·算法·matlab·数据挖掘·回归
皎味小行家2 小时前
第四十六天|动态规划|子序列|647. 回文子串,5.最长回文子串, 516.最长回文子序列,动态规划总结篇
java·数据结构·算法·leetcode·动态规划
中东大鹅2 小时前
【排序算法】桶排序
算法·排序算法
E_han2 小时前
7.list
开发语言·汇编·数据结构·c++·算法·list
维齐洛波奇特利(male)3 小时前
(动态规划 leetcode377)组合求和IV
算法·动态规划
左灯右行的爱情3 小时前
图论——环检测
图论
无限码力4 小时前
最大矩阵的和
数据结构·算法·华为od·笔试·华为od e卷真题
阿猿收手吧!4 小时前
【CPP】C++后端开发面试:深入理解编程中的锁机制
c语言·开发语言·c++·算法·面试·职场和发展