• 大小: 4KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-04
  • 语言: C/C++
  • 标签: 数据结构  C++  Dijstra  

资源简介

大连理工大学软件学院数据结构上机题目 VS2010以上编译运行通过 算法封装在了2个函数里,在Main里调用传参就行

资源截图

代码片段和文件信息

#include
#include
#define INF 9999
#define VIS 1
#define UNVIS 0
using namespace std;
class graph{
public:
int ** matrix;
string * vertex;
int vertex_num;
int current_size;
graph(int vertex_num=5)
{


if(vertex_num<=0)
{
cout<<“vertex_num erro“< exit(1);
}
this->current_size=0;
this->vertex_num=vertex_num;
vertex = new string[vertex_num];
matrix = new int*[vertex_num];
for (int i = 0; i < vertex_num; i++)
{
matrix[i] =  new int[vertex_num];
}


//matrix初始化
for (int i = 0; i  vertex_num; i++)
{
for (int j = 0; j  vertex_num; j++)
{
if(i==j)
matrix[i][j]=0;
else
matrix[i][j]=INF;
}
}

}
void insert(string vertex_value)
{
if(current_size==vertex_num)
{
cout<<“oversize“< return;
}

vertex[current_size++] = vertex_value;

}
void link(int aint bint weight)
{
if(weight<=0)
{
cout<<“weight erro“< return;
}
//vertex[0]  vertex[current_size-1]
if(a {
matrix[a][b]=weight; 
}

else
{

cout<<“顶点下标越界:“< }

}

void show()
{
for (int i = 0; i < current_size; i++)
{
cout< }
cout<
for (int i = 0; i < current_size; i++)
{
for (int j = 0; j < current_size; j++)
{
cout< }
cout< }
}

void dijstra(int sint * Dint * path)
{

bool * mark = new bool[current_size];

for (int i = 0; i < current_size; i++)
{
mark[i]=UNVIS;
path[i]=-1;
D[i]=INF;
}
D[s]=0;

path[s]=s;

for (int i = 0; i < current_size; i++)
{
int min_sum=INF;
int min_ver=0;


//在到所有顶点的现有路径中找一条最小的
for (int j = 0; j < current_size; j++)
{
if(D[j] {
min_sum = D[j];
min_ver = j;
}
}

mark[min_ver]=VIS;//添加顶点
//更新该顶点的附近边
for (int i = 0; i < current_size; i++)
{
if(  mark[i]==UNVIS &&    (matrix[min

评论

共有 条评论