[英]Implementing Weighted edges to graph
我希望能夠實現最短路徑算法,但我意識到實際邊緣本身沒有權重。 我想改變我的結構,以便我可以為從一個頂點到另一個頂點的權重取一個數值。 我將如何實現這一點?
#include<stdio.h>
#include<stdlib.h>
struct edge
{
int vertexIndex;
struct edge *edgePtr;
}edge;
struct vertex
{
int vertexKey;
struct edge *edgePtr;
}vertex;
struct vertex graph[1000];
int vertexCount=0;
void InsertVertex(int vertexKey)
{
graph[vertexCount].vertexKey=vertexKey;
graph[vertexCount].edgePtr=NULL;
vertexCount++;
}
void insertEdge(int vertex1, int vertex2)
{
struct edge *e,*e1,*e2;
e=graph[vertex1].edgePtr;
while(e&& e->edgePtr)
{
e=e->edgePtr;
}
e1=(struct edge *)malloc(sizeof(*e1));
e1->vertexIndex=vertex2;
e1->edgePtr=NULL;
if(e)
e->edgePtr=e1;
else
graph[vertex1].edgePtr=e1;
e=graph[vertex2].edgePtr;
while(e&& e->edgePtr)
{
e=e->edgePtr;
}
e2=(struct edge *)malloc(sizeof(*e2));
e2->vertexIndex=vertex1;
e2->edgePtr=NULL;
if(e)
e->edgePtr=e2;
else
graph[vertex2].edgePtr=e2;
}
void printGraph()
{
int i;
struct edge *e;
for(i=0;i<vertexCount;i++)
{
printf("%d",i);
e=graph[i].edgePtr;
while(e)
{
printf("->%d",e->vertexIndex);
e=e->edgePtr;
}
printf("\n");
}
}
int main()
{
InsertVertex(1);
InsertVertex(2);
InsertVertex(3);
InsertVertex(4);
InsertVertex(5);
insertEdge(0,1);
insertEdge(0,2);
insertEdge(1,3);
insertEdge(1,4);
insertEdge(3,5);
printGraph();
return 0;
}
權重是邊的屬性,因此您可以將其添加到邊結構中。
struct edge
{
// You can use "-1" as the default invalid weight
int weight;
int vertexIndex;
struct edge *edgePtr;
}edge;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.