条条大路通罗马(邻接矩阵法)

N个城市(N<=10,09编号,城市间要么有路,要么没路,计算城市AB之间到底有多少条路。

输入:N A B1<N<=10,0<=A,B<=9A为出发城市,B为目的城市。然后n行表示行编号的城市到其他城市有没有路,0表示没有,1表示有路。

输出:AB有多少条路

输入:3 0 2

      1 1 1

      1 1 1

      1 1 1

输出:2

#include<iostream>
#include<string>
using namespace std;
int main()
{ 
    int n,a,b;
	cin>>n>>a>>b;
	int **r=new int*[n];
	int *visit=new int[n];
	int *que=new int[n];
	for(int i=0;i<n;i++)
	{
		r[i]=new int[n];
		visit[i]=0;
	}
	for(int i=0;i<n;i++)
		for(int j=0;j<n;j++)
			cin>>r[i][j];
	int top=-1,tail=-1,s,num=0;
	que[++tail]=a;
	visit[a]=1;
	while(top!=tail)
	{
         s=que[++top];           //出列一个
		 for(int i=0;i<n;i++)
		 {
			 if(r[s][i]==1&&visit[i]==0&&i!=b)     //连通性&&访问过没
			 {
				 que[++tail]=i;
				 visit[i]=1;
			 }
			 else if(r[s][i]==1&&i==b)      //到达b时,不需要对b进行操作,直接判断队列中下一个
				 num++;              //到达一次路线加1
		 }
	}
	cout<<num<<endl;
	delete []que;
    delete []visit;
	for(int i=0;i<n;i++)
		delete []r[i];
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
邻接矩阵是一种表示图的方,可以用于存储图中节点之间的连接关系。在 Python 中,可以使用二维数组来表示邻接矩阵。 下面是一个简单的示例代码,展示了如何通过邻接矩阵来表示和操作一个简单的无向图: ```python class Graph: def __init__(self, num_vertices): self.num_vertices = num_vertices self.adj_matrix = [[0] * num_vertices for _ in range(num_vertices)] def add_edge(self, src, dest): # 由于是无向图,所以需要设置两个方向的连接关系 self.adj_matrix[src][dest] = 1 self.adj_matrix[dest][src] = 1 def remove_edge(self, src, dest): self.adj_matrix[src][dest] = 0 self.adj_matrix[dest][src] = 0 def print_graph(self): for row in self.adj_matrix: for val in row: print(val, end=" ") print() # 创建一个有 5 个节点的图 g = Graph(5) g.add_edge(0, 1) g.add_edge(0, 4) g.add_edge(1, 2) g.add_edge(1, 3) g.add_edge(1, 4) g.add_edge(2, 3) g.add_edge(3, 4) g.print_graph() ``` 上述示例代码中,首先定义了一个 `Graph` 类,其中 `num_vertices` 表示图中节点的数量,`adj_matrix` 是一个二维数组用于存储邻接矩阵。 然后,定义了几个方来操作图,例如 `add_edge` 用于添加边,`remove_edge` 用于移除边,`print_graph` 用于打印邻接矩阵。 最后,创建一个具有 5 个节点的图,并添加了一些边,然后调用 `print_graph` 方打印出邻接矩阵。 你可以根据实际需求进行修改和扩展。希望对你有帮助!如果还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值