数据结构 Kruskal Prim Dijkstra Floyd算法(C++)

写给自己做个备份的。

 Kruskal Prim算法基本上是看别人的写的,Dijkstra Floyd算法是靠自己的理解写的。

#include 
#include 
#include 
using namespace std;
#define UINT unsigned int
#define vexCounts 6
#define INF 0xFFFFFFFF
///Kruskal算法
///储存边的信息
struct Arc
{
	int u;
	int v;
	UINT cost;
};
///Prim算法
///通过不断更新点到现有点的距离来取最短距离的点形成一个生成树
struct Node
{
	UINT data;
	UINT lowerestCost;
}Nodes[vexCounts];
///vextex 顶点
char vextex[] = { 'A', 'B', 'C', 'D', 'E', 'F' };

void AdjMatrix(unsigned int adjMat[][vexCounts])
{
	for(int i=0;iadjMat[min][i])
			{
				Nodes[i].lowerestCost = adjMat[min][i];
				Nodes[i].data = min;
			}
		}
	}
}

void ReadArc(UINT adjMat[][vexCounts],vector& vertexArc)
{
	Arc* tmp = NULL;
	for(UINT i=0;icost = adjMat[i][j];
				tmp->u = i;
				tmp->v = j;
				vertexArc.push_back(*tmp);
				delete tmp;
			}
		}
	}
}

bool cmp(Arc a,Arc b)
{
	return a.cost < b.cost;
}

bool FindTree(UINT a,UINT b,vector> &Tree)
{
	UINT index_u = INF;
	UINT index_v = INF;
	for(int i=0;i vertexArc;
	int ct = 0;
	ReadArc(adjMat, vertexArc);
	sort(vertexArc.begin(), vertexArc.end(), cmp);
	vector> Tree(vexCounts);
	for(UINT i=0;iDis[i]&&Dis[i])
		{
			idx = i;
			min = Dis[i];
		}
	}
	return idx;
}

void ChangeDis(UINT adjMat[][vexCounts],UINT Distance[],UINT Dis[],UINT idx)
{
	for(int i=0;i

你可能感兴趣的:(数据结构 Kruskal Prim Dijkstra Floyd算法(C++))