C語言-最短路徑樹(MST)問題
本帖最後由 呂晨 於 2021-9-29 18:39 編輯讀txt檔
我有查到兩種方法,一種是一個點一個點找,另一種拿上面這個file來解說,總共有11個點先扣掉起點N1,剩下10個點,各自找到最近的相鄰點成為一個group,會變成有5個gropu,這五個group再去找最近的相鄰group,連接成為新的group。
第二種會變成有分支出去,而第一種我已經寫出來了。
有兩個問題想詢問
第一個問題是第二種要怎麼去構思
第二個問題是把結果輸出後,會跑出很多空格,我是用memset把字串都變成'\0',在小黑窗上面不會顯示這些,但輸出到txt後會跑出來
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#pragma warning( disable : 4996 )
#define N 13
struct point
{
char* name;
int x;
int y;
float howlong;
}*matrix;
void findpoint(struct point* matrix, int line)
{
struct point temp;
int times = 1, i = 0;
int x = 0, y = 0;
float v = 20000;
while (line>=times)
{
printf("YES");
for (i = times ; i < line; i++)
{
matrix.howlong = pow(matrix.x - matrix.x, 2) + pow(matrix.y - matrix.y, 2);
}
for (x = times; x < line; x++)
{
for (y = times; y < line - 1; y++)
{
if (matrix.howlong > matrix.howlong)
{
temp = matrix;
matrix = matrix;
matrix = temp;
}
}
}
printf("(%s,%s) Length = %f", matrix.name, matrix.name, sqrt(matrix.howlong));
times++;
}
}
int main()
{
int i, line=0, tmp;
char name;
char value;
printf("enter the file name:(.txt)");
scanf("%s", &name);
FILE* fp;
fp = fopen(name, "r");
if (fp == NULL)
{
puts("error");
}
while ((i = fgetc(fp)) != EOF)
{
if (i == '\n') line++;
}
fseek(fp, 0L, SEEK_SET);
i = 0;
matrix = (struct point*)malloc(line * sizeof(struct point));
while ((fgets(value, sizeof(value), fp)) != NULL)
{
char* token = strtok(value, "(");
matrix.name = (char*)malloc(sizeof(char) * N);
strcpy(matrix.name, token);
token = strtok(NULL, ",");
tmp = atoi(token);
matrix.x = tmp;
token = strtok(NULL, ")");
tmp = atoi(token);
matrix.y = tmp;
i++;
}
findpoint(matrix, line);
free(matrix);
}
頁:
[1]