6-3 两顶点之前有路径吗? (20 分)

/*
    这个题很简单,就是B题的一种变形,直接把B题的代码copy过来,然后改一下变量就过了
*/

int hasPath(struct Graph *g, int v, int w)
{
    int vm = 0;
    
    int q[1000];
    int front = -1, rear = -1;
    q[++rear] = v;
    
    int flag = 0;
    
    while(front!=rear)
    {
    	int top = q[++front];
    	visited[top] = 1;
    	vm++;
    	for(int i = 0;i < g->v;i++)
    	{
    		if(g->Adj[i][top] == 1)
			{
    			if(!visited[i])
				{
    				visited[i] = 1;
    				q[++rear] = i;
				}
			}
		}
	}
	
	if(visited[w] == 1) {
		flag = 1;
		printf("%d\n",vm);
		printf("%d\n",vm);
		return flag;
	}else{
		printf("%d\n",vm);
	}
	
	int qq[1000];
	front = -1, rear = -1;
	int wm = 0;
	qq[++rear] = w;
	
	while(front!=rear)
    {
    	int top = qq[++front];
    	visited[top] = 1;
    	wm++;
    	for(int i = 0;i < g->v;i++)
    	{
    		if(g->Adj[i][top] == 1){
    			if(!visited[i])
				{
    				visited[i] = 1;
    				qq[++rear] = i;
				}
			}
		}
	}
	printf("%d\n",wm);
	
	return 0;
}

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的信息,我们可以使用深度优先搜索(DFS)算法来判断顶点之间是否存在路径,并计算连通量中的顶点数。 首先,我们需要构建无向图的邻接表表示。然后,我们可以使用DFS算法从一个顶点开始遍历图,并标记已访问的顶点。如果我们能够访问到目标顶点,则说明顶点之间存在路径。 以下是一个示例代码,演示了如何实现上述功能: ```python class Graph: def __init__(self, vertices): self.V = vertices self.adj = [[] for _ in range(vertices)] def addEdge(self, u, v): self.adj[u].append(v) self.adj[v].append(u) def DFS(self, v, visited): visited[v] = True count = 1 for i in self.adj[v]: if not visited[i]: count += self.DFS(i, visited) return count def isConnected(self, u, v): visited = [False] * self.V count_u = self.DFS(u, visited) count_v = self.DFS(v, visited) if count_u > 1 and count_v > 1: return True else: return False # 创建一个无向图 g = Graph(6) g.addEdge(0, 1) g.addEdge(0, 2) g.addEdge(1, 3) g.addEdge(2, 3) g.addEdge(2, 4) g.addEdge(3, 4) g.addEdge(4, 5) # 判断顶点之间是否存在路径,并计算连通量中的顶点数 u = 0 v = 5 if g.isConnected(u, v): print("顶点之间存在路径") else: print("顶点之间不存在路径") ``` 在上述示例中,我们创建了一个包含6个顶点的无向图,并添加了边。然后,我们使用`isConnected`函数判断顶点0和顶点5之间是否存在路径,并打印相应的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值