c - C 中的结构、城市和距离、图形和 Dijkstras
问题描述
我会尽量保持简单而不是胡扯。我是一个相对初学者,我在为我的作业做什么的概念上遇到了麻烦。我得到了一个文本文件,其中包含起始城市、结束城市和它们之间的距离。我必须使用该文本文件并在 C 中构造一个程序,将它们分类成堆并使用 Dijkstras 来找到最短距离。到目前为止我写的代码是读取文本文件并打印出来,
struct intertown_distance{
char start[60];
char end[60];
int distance;};
void fileRead(struct intertown_distance data){
int i;
FILE *fptr;
fptr = fopen("data.txt", "r");
if (fptr == NULL)
{
printf("Can not open the file\n");
exit(1);
}
for(i=0; i<40; i++)
{
fscanf(fptr, "%s %s %d", data.start, data.end, &data.distance);
printf("%s %s %d \n", data.start, data.end, data.distance);
}
fclose(fptr);}
我是 C、结构、节点的概念和所有这些不同类型的数据结构的新手,所以我想知道是否有人可以通过分享一些知识或一些可以帮助我理解和入门的阅读材料链接来提供帮助。我正在努力从课程中的其他人甚至实验室负责人/讲师那里获得帮助。
非常感谢
解决方案
到目前为止一切顺利,您的代码似乎运行良好。
我只是做了一些改变。希望你不介意。
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
/* max size of lines */
#define MAXCHARLINE 1000
/* max size of city names */
#define MAXCHARCITY 60
typedef struct intertown_dist_s
{
char start[MAXCHARCITY];
char end[MAXCHARCITY];
unsigned int distance;
}intertown_dist_t;
int main() {
FILE *fp;
char str[MAXCHARLINE];
char* filename = "data.txt";
intertown_dist_t data;
fp = fopen(filename, "r");
if (fp == NULL)
{
printf("Could not open file %s",filename);
return 1;
}
while (fgets(str, MAXCHARLINE, fp) != NULL)
{
sscanf(str, "%s %s %d", data.start, data.end, &data.distance);
printf("%s %s %d \n", data.start, data.end, data.distance);
}
fclose(fp);
return 0;
}
然后,您可以将解析的 intertown_distance 元素存储在静态数组中:
#define MAXINTERTOWN 30
...
intertown_dist_t data[MAXINTERTOWN];
您还可以使用链表将它们存储为动态数组: https ://www.geeksforgeeks.org/generic-linked-list-in-c-2/ 这可能是一个好的开始,因为链表结构集成了节点概念。你也可以看看这个:Linked list with multiple parent and child nodes
推荐阅读
- javascript - React Native Elements ChekBox onPress 不改变状态
- java - Netbeans中的Spring Boot Rest Web应用程序
- angular - 如何创建双向服务功能
- java - Intellij Idea NoClassDefFoundError: com/intellij/util/messages/Topic
- excel - 导入到 excel 时,office 365 excel csv 超链接无法正确显示
- r - 将 rtweets 包中的推文写入 csv
- mongodb - MongoDB/Mongoose:将相关记录附加到每个聚合结果中
- linux - 为什么 RedHat dotnet core 漏洞需要重建您的应用程序?
- java - 从数组列表向 int 添加值
- openstack - OpenStack:Neutron 中的管理网络和管理网络有什么区别?