所以我正尝试使用结构数组中的链表生成图形。每个结构都包含一个图形边缘,即2个节点和一个权重。该图是无向的,因此从node2到node1还有一条边。从文本文件中扫描了每个结构的内容(如果有帮助,我也可以上传该文件)。
//
struct Edge{
char node_1[20];
char node_2[20];
int weight;
};
\\declaring the array of structures
struct Edges edge[49];
完成此操作后,我需要实现最短路径算法,但是我在这一步骤上已经停留了一段时间。
更新;这是我扫描的文本文件
Carlisle Newcastle 92
Nottingham Birmingham 77
Leeds York 39
Glasgow Edinburgh 74
Moffat Carlisle 65
Doncaster Hull 76
Northampton Birmingham 90
Leicester Lincoln 82
Sheffield Birmingham 122
Lincoln Doncaster 63
Sheffield Doncaster 29
Bristol Reading 130
Hull Nottingham 145
Blackpool Leeds 116
Birmingham Bristol 139
Manchester Leeds 64
Carlisle Blackpool 140
Leicester Northampton -61
Newcastle York 135
Glasgow Moffat -28
Leicester Sheffield 100
Carlisle Liverpool -30
Birmingham Manchester 129
Oxford Bristol 116
Leeds Hull 89
Edinburgh Carlisle 154
Nottingham Sheffield 61
Liverpool Manchester 56
Carlisle Glasgow 50
Sheffield Lincoln 74
York Doncaster 55
Newcastle Edinburgh 177
Leeds Sheffield 53
Northampton Oxford 68
Manchester Carlisle 20
答案 0 :(得分:0)
例如一个(单个)链表:
typedef struct node {
char name[20];
struct node* next;
} node;
您应该在实现边缘之前选择算法,因为其中一些算法在某些数据结构上非常有效或无效。
由于数据中的权重为负,因此像Dijkstra这样的知名品牌是不可能的。甚至有可能由于负循环而使您的程序无法解决问题。
据我所知,Bellman-Ford应该可以工作。
现在由您决定。如果您遇到上述步骤之一,请随时提问。