数据结构算法设计题,会的进来看看设计一个算法,求图G中距离顶点V的最短路径长度最大的一个顶点,设V可达其余各个顶(最好有完整答案,本人小白)
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/17 19:24:25
数据结构算法设计题,会的进来看看设计一个算法,求图G中距离顶点V的最短路径长度最大的一个顶点,设V可达其余各个顶(最好有完整答案,本人小白)数据结构算法设计题,会的进来看看设计一个算法,求图G中距离顶
数据结构算法设计题,会的进来看看设计一个算法,求图G中距离顶点V的最短路径长度最大的一个顶点,设V可达其余各个顶(最好有完整答案,本人小白)
数据结构算法设计题,会的进来看看
设计一个算法,求图G中距离顶点V的最短路径长度最大的一个顶点,设V可达其余各个顶(最好有完整答案,本人小白)
数据结构算法设计题,会的进来看看设计一个算法,求图G中距离顶点V的最短路径长度最大的一个顶点,设V可达其余各个顶(最好有完整答案,本人小白)
迪杰斯特拉算法 data 数组里存放的是 有向图的 矩阵表示
QQ 578721802
#include "stdio.h"#include "stdlib.h"
#define INT_MAX 32676
/**
Dijkstra 算法是用来计算图中一个
顶点到 其余的所有顶点的
最短距离的算法
*/
/***
-1 表示两点之间距离是无限大
path[v] 表示的这个数组代表了Vx到 v 的最短路径
路径 = path[v][0],v,path[v][1],path[v][2] 直到一个path[v][x] == -1
Length[v] 代表了Vx到 v 的最短长度:权之和
代码注释:
**/
typedef struct graph{
int **p;
int vertNum;
int arcNum;
}*Graph,g;
typedef struct l{
int* le;
bool* isIn;
}*Le;
int VETNUM=6;
void init(Le &L,int **&P,Graph &G);
void Dijikstra(Le &L,int **&P,Graph &G,int &V);
int lastInsert(int *&p,int &x);
void myprint(Le &L,int**&p);
int main(){
Le Length; // 某个顶点到其余所有顶点的最短距离
int **Path; // 路径
int Vx; // 某个顶点
Graph G; // 图
init(Length,Path,G);
printf("Enter the begin vertex:\n");
scanf("%d",&Vx);
Dijikstra(Length,Path,G,Vx);
myprint(Length,Path);
}
void myprint(Le &L,int**&p){
int i,j;
for(i=0;i<6;i++){
printf("%d:\t",L->le[i]);
for(j=0;j<6;j++)
printf("%d\t",p[i][j]);
printf("\n");
}
}
int lastInsert(int *&p,int &x){
int i;
for(i=0;i<VETNUM;i++){
if(p[i]==-1){
p[i] = x;
return 1;
}
}
}
void init(Le &L,int **&P,Graph &G){
int data[6][6] ={{-1,-1,10,-1,30,100},{-1,-1,5,-1,-1,-1},
{-1,2,-1,50,-1,-1},{-1,-1,-1,-1,-1,10},
{-1,-1,-1,20,-1,60},{-1,-1,-1,-1,-1,-1}};
int data1[6][6] = {{-1,1,20,80,-1,400},{2,-1,-1,-1,-1,700},
{40,6,-1,4,-1,100},{-1,-1,-1,-1,4,-1},
{-1,-1,-1,-1,-1,3},{-1,-1,-1,-1,-1,-1}};
int vextnum = 6;
int i,j;
G = (Graph)calloc(sizeof(g),1);
G->p = (int**)malloc(sizeof(int*)*6);
P = (int**)malloc(sizeof(int*)*6);
L = (Le)calloc(sizeof(struct l),1);
L->le = (int*)calloc(sizeof(int),6);
L->isIn = (bool*)calloc(sizeof(bool),6);
for(i=0;i<6;i++){
G->p[i] = (int*)malloc(sizeof(int)*6);
P[i] = (int *)calloc(sizeof(int),6);
}
G->vertNum = 6;
for(i=0;i<vextnum;i++)
for(j=0;j<vextnum;j++)
G->p[i][j] = data[i][j],P[i][j]= -1;
/***
for(i=0;i<6;i++)
printf("%d\n",L->isIn[i]);
printf("xsaxas");
*/
}
void Dijikstra(Le &L,int **&P,Graph &G,int &V){
int Vk;
int i,j;
int Min;
int check=0;
/**
首先将L初始化 在这里面必有一条
V 到其他顶点的最小值
**/
for(i=0;i<G->vertNum;i++){
L->le[i] = G->p[V][i];
//printf("%d\t",L->le[i]);
if(L->le[i] > -1)
check =1;
}
if(check==0)
printf("Error!"),exit(0);
for(i=1;i<G->vertNum;i++){
Min = INT_MAX;
for(j=0;j<G->vertNum;j++)
if(!L->isIn[j])
{
if(L->le[j]!=-1&&L->le[j]<Min)
{
Vk = j, Min= L->le[j];
}
}
L->isIn[Vk] = true; // 将距离Vx最近的点加入到另外一个集合中
// 也就是说下一次不要比较
lastInsert(P[V],Vk);
for(j=0;j<G->vertNum;j++){
if((G->p[Vk][j]!=-1)&&!L->isIn[j]
&&(Min+G->p[Vk][j]<L->le[j]))
{
L->le[j] = Min+G->p[Vk][j];
lastInsert(P[j],Vk);
lastInsert(P[j],j);
}
if(L->le[j]==-1&&(G->p[Vk][j]!=-1))
{
L->le[j] = Min+G->p[Vk][j];
lastInsert(P[j],Vk);
lastInsert(P[j],j);
}
}
}
}
数据结构算法设计题,会的进来看看设计一个算法,求图G中距离顶点V的最短路径长度最大的一个顶点,设V可达其余各个顶(最好有完整答案,本人小白)
数据结构中的算法设计题怎么提高
设计算法是只需要考虑数据结构的设计对吗
数据结构中算法设计题数据结构中要编写一个算法,查找单链表中值为1的个数,初学,最好完整点,
“数据结构的设计”是什么意思
数据结构算法设计题:单循环链表中删除表中所有数值相同的多余元素
计算机二级VB,与设计算法有关的解释设计算法时只需要考虑数据结构的设计,设计算法时只需要考虑结果的可靠性,
数据结构题,设计一个算法,将x插入一个递增顺序表中,并保持其递增顺序
使设计一个非递归算法在O(n)时间内将一个含有n个元素的单链表逆置,要求其辅助空间为常量数据结构与算法问题
设计一个算法,求出36的因数
数据结构 设计算法实现一个10行10列的对称矩阵的压缩和解压缩,并要求打印出对应的内容.
数据结构 :假设图G采用邻接表存储,试设计一个算法,求不带权无向连通图G中距离顶点v的最远的顶点?快
数据结构 已知一个顺序表递增有序,试设计一种算法,将x插入到表中的适当位置,以保持顺序表的有序性
数据结构 算法设计题求助!设某单链表L的结点结构为(data,next),其中data域中存放一整数,next为指针.设计一算法,判断该链表的元素值是否递增!
会的进来看看
设计地理要素三大实体之一的点实体的数据结构,应包含名称,ID号,三维坐标.设计以上述点实体为对象的循环队列结构;设计上述循环队列的操作算法,含入队,出队等基本算法;设计一个简单
数据结构/C语言:[实验内容] 有一个整形数组a,其中含有n个元素,设计尽可能好的算法求数据结构/C语言:[实验内容] 有一个整形数组a,其中含有n个元素,设计尽可能好的算法求其中的最大元
急求北大poj 水题,要求刚学完C要求刚学完c就能做,不设计数据结构和算法的内容.