C++——《算法分析》实验肆——单源最短路径问题

实验目的
1、理解分支限界法的剪枝搜索策略;
2、 掌握分支限界法的算法柜架;
3、 掌握分支限界法的算法步骤;
4、 通过应用范例学习动态规划算法的设计技巧与策略;
源程序

#include 
#include
#include
using namespace std;
typedef struct ArcCell {
     
	int u;
	int info;
	ArcCell(int a, int b){
     
		u = a;
		info = b;
	}
}ArcCell, AdjMaxtrix[100][100];
typedef struct {
     
	int data;
	int length;
}VerType;
typedef struct {
     
	VerType vexs[100];
	vector<ArcCell>arcs[1001];
	int vexnum;
	int arcnum;
}Graph;
Graph G;
queue<int> q;
int main()
{
     
	int m, n, t;
	cout << "输入顶点个数和弧边个数:" << endl;
	cin >> G.vexnum >> G.arcnum;
	for (int i = 1; i <= G.vexnum; i++)
	{
     
		G.vexs[i].data = i;
		G.vexs[i].length = 10000;
	}
	cout << "输入弧及权重:" << endl;
	for (int i = 1; i <= G.arcnum; i++)
	{
     
		cin >> m >> n >> t;
		G.arcs[m].push_back({
      n,t });
	}

	G.vexs[1].length = 0;
	q.push(G.vexs[1].data);
	while (!q.empty())
	{
     
		int t = q.front();
		for (int i = 0; i < G.arcs[t].size(); i++)
		{
     
			int k = G.arcs[t][i].u;
			if (G.vexs[t].length + G.arcs[t][i].info <= G.vexs[k].length)
			{
     
				G.vexs[k].length = G.vexs[t].length + G.arcs[t][i].info;
				q.push(G.vexs[k].data);
			}
		}
		q.pop();
	}
	for (int i = 1; i <= G.vexnum; i++) cout << G.vexs[i].data << "——" << G.vexs[i].length << endl;
	return 0;
}

实验结果:
C++——《算法分析》实验肆——单源最短路径问题_第1张图片

你可能感兴趣的:(c++,算法)