首页 > 解决方案 > 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、结构、节点的概念和所有这些不同类型的数据结构的新手,所以我想知道是否有人可以通过分享一些知识或一些可以帮助我理解和入门的阅读材料链接来提供帮助。我正在努力从课程中的其他人甚至实验室负责人/讲师那里获得帮助。

非常感谢

标签: cdata-structures

解决方案


到目前为止一切顺利,您的代码似乎运行良好。

我只是做了一些改变。希望你不介意。

#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


推荐阅读