Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的结构、城市和距离、图和Dijkstra_C_Data Structures - Fatal编程技术网

C语言中的结构、城市和距离、图和Dijkstra

C语言中的结构、城市和距离、图和Dijkstra,c,data-structures,C,Data Structures,我会尽量保持这个简单,而不是华夫饼干。我是一个相对的初学者,对于我的作业该做什么的概念我有困难。我收到了一个文本文件,上面有起始城市、结束城市以及它们之间的距离。我必须使用这个文本文件,用C语言构造一个程序,将它们排序成一堆,并使用Dijkstras找到最短距离。到目前为止我写的代码是读取文本文件并打印它 struct intertown_distance{ char start[60]; char end[60]; int distance;}; void fileRead(struct i

我会尽量保持这个简单,而不是华夫饼干。我是一个相对的初学者,对于我的作业该做什么的概念我有困难。我收到了一个文本文件,上面有起始城市、结束城市以及它们之间的距离。我必须使用这个文本文件,用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);}
struct intertown\u距离{
字符开始[60];
半焦端[60];
int距离;};
void fileRead(结构层间距离数据){
int i;
文件*fptr;
fptr=fopen(“data.txt”,“r”);
如果(fptr==NULL)
{
printf(“无法打开文件\n”);
出口(1);
}

对于(i=0;i到目前为止还不错,您的代码似乎工作得很好

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

#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;
}
您还可以使用链表将它们存储为动态数组: 这可能是一个良好的开端,因为链表结构集成了节点概念。
你也可以看看这个:

你能说得更具体一点吗?你到底被困在哪里了?我被困在如何使用文本文档中提供的信息来设置节点或数组以实现图形和Dijkstras算法的问题上。如果这仍然不清楚,我很抱歉。我认为我对整体的理解不足导致了这一问题我很难准确地指出我所问的问题,这对任何人来说都是没有用的。对不起,谢谢!一定会查看链接的。非常感谢
#define MAXINTERTOWN 30
...
intertown_dist_t data[MAXINTERTOWN];