文档介绍:数据结构上机报告
名称:狄克斯特拉算法
姓 名:
学 号: 310
班 级: 计算101
实验日期:
指导教师:
问题描述:
带权图中从一个结点到另一个结点可能存在着多条路径,带权路径长度值最小ize;j>i;j--) L->list[j]=L->list[j-1];
L->list[i]=x; /*插入 x*/
L->size++; /*元素个数加*/
return 1; } }
/*删除数据元素*/
int ListDelete(SeqList *L,int i,DataType *x)
(
int j;
if(L->size<=0)
(
printf("顺序表已空无数据元素可删!\n");
return 0;
}
else if(i<0||i>L->size-1)
(
printf("参数1不合法");
return 0;
}
else
(
*x=L->list[i]; /*保存删除的元素到乂中*/
/*依次前移*/
for(j=i+1;j<=L->size-1;j++) L->list[j-1]=L->list[j];
L->size--; /*数据元素个数减*/
return 1; } }
/*取数据元素*/
int ListGet(SeqList L,int i,DataType *x)
/*取顺序表L中第i个数据元素存于x中,成功返回,失败返回*/
if(i<0||i>-1)
(
printf("参数1不合法!\n");
return 0;
}
else
(
*x=[i];
return 1;
}
}
文件” ”
#include〃〃 /*包含顺序表头文件*/
typedef struct
(
SeqList Vertices; /*存放结点的顺序表*/
int edge[MaxVertices][MaxVertices]; /* 存放边的邻接矩阵 */
int numOfEdges; /* 边的条数*/
}AMGraph; /*图的结构体定义*/
void Initiate(AMGraph *G,int n) /*初始化*/
(
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
(
if(i=j)G->edge[i][j]=0;
else G->edge[i][j]=MaxWeight;
}
G->numOfEdges=0; /* 边的条数置为 0*/
ListInitiate(&G->Vertices); /* 顺序表初始化 */
}
void InsertVertex(AMGraph *G,DataType vertex)
/*在图G中插入结点vertex*/
(
ListInsert(&G->Vertices,G->,vertex);
/*顺序表尾插入*/
}
void InsertEdge(AMGraph *G,int v1,int v2,int weight)
/*在图G中插入边<v1,v2>,边<v1,v2>的权为weight*/
(
if(v1<0||v1>G->||v2<0||v2>G->)
(
printf("参数v1或v2越界出错!\n");
exit(1);
}
G->edge[v1][v2]=weight;
G->numOfEdges++;
}
void DeleteEdge(AMGraph *G,int v1,int v2)
/*在图G中删除边<v1,v2>*/
(
if(v1<0||v1>G->||v2<0||v2>G->||v1==v2)
(
printf("参数v1或v2越界出错!\n");
exit(1);
}
if(G->edge[v1][v2]==MaxWeight||v1==v2)
(
printf("该边不存在!\n");
exit(0);
}
G->edge[v1][v2]=MaxWeight;
G->numOfEdges--;
}
void DeleteVertex(AMGraph *G,int v)
/*删除结点v*/
(
int n=ListLength(G->Vertices),i,j;
DataType x;
for(i=0;i<n;i++) /*计算删除后的边数*/
for(j=0;j<n;j++