データ構造総括14——図5——単一ソース最短パスby DexterYan
2558 ワード
一、基礎知識
二、コード要求
隣接マトリクス、隣接テーブルのいずれかを図の記憶構造として選択し、ディジェストラアルゴリズムを用いて、指定された単一ソース点から図中の残りの各頂点への最短経路(2時間)を実現する.
三、アルゴリズムの構想分析
四、アルゴリズムの反省
五、コード実現
六、コードの反省
脳障害バグ1、scanfの中には他の文字はありません.例えばscanf(「開始頂点:%dを入力してください」、&start);これにより、文字を表示しないだけでなく、付与のプロセスにも影響します.
二、コード要求
隣接マトリクス、隣接テーブルのいずれかを図の記憶構造として選択し、ディジェストラアルゴリズムを用いて、指定された単一ソース点から図中の残りの各頂点への最短経路(2時間)を実現する.
三、アルゴリズムの構想分析
四、アルゴリズムの反省
五、コード実現
#include
#include
#define MaxVertexNum 100
#define INF 32767 //INF
typedef char VertexType;
typedef int EdgeType;
typedef struct
{
VertexType vexs[MaxVertexNum];//
EdgeType edges[MaxVertexNum][MaxVertexNum];// ,
int n,e;//
}MGraph;//
struct node
{
int adjvex;
int lowcost; //
}closedge[MaxVertexNum];// , U U-V (U )
int visited[MaxVertexNum];
int CreateMGraph(MGraph *G)//
{
int i, j, k, weight;
printf(" ( : , ):
");
scanf("%d,%d",&(G->n),&(G->e));// /* G->n ?*/
printf(" ( : ):
");
for(i=0; in; i++)
{
scanf("
%c",&(G->vexs[i]));// ,
}
for(i=0; in; i++)
{
for(j=0; jn; j++)
{
G->edges[i][j]=INF;//
}
}
printf(" ( :i,j,weight):
");
for(k=0; ke; k++)
{
scanf("%d,%d,%d",&i,&j,&weight);
G->edges[i][j]=weight;// G->deges[j][i]=1,
// G->edges[j][i]=weight;
}
/* ,
for(i=0; in; i++)
{
for(j=0; jn; j++)
{
printf("(%d)",G->edges[i][j]);
}
printf("
");
}
*/
}
void dispath(int dist[],int path[],int s[],int n,int v)
{
int i,k;
for(i=0; in; i++)
{
dist[i]=G->edges[v][i];//
s[i]=0; //s ,0
if(G->edges[v][i]n; i++)// , v
{
mindis=INF;
k=v;
for(j=0; jn; j++)// V-S vk
{
if(s[j]==0&&dist[j]n; j++)// V-S dist[j]
{
if(s[j]==0&&G->edges[k][j]edges[k][j]edges[k][j];
path[j]=k;
}
}
}
dist[v]=0;
dispath(dist,path,s,G->n,v);//
}
int main()
{
MGraph x;
int start;
CreateMGraph(&x);
printf(" :");
scanf("%d",&start);
dijkstra(&x,start);
return 0;
}
六、コードの反省
脳障害バグ1、scanfの中には他の文字はありません.例えばscanf(「開始頂点:%dを入力してください」、&start);これにより、文字を表示しないだけでなく、付与のプロセスにも影響します.