【发布时间】:2016-01-24 04:04:33
【问题描述】:
我有一个 txt 文件,其中包含 2 个图形和以下格式的顶点数:
6
0 1 0 1 0 0
1 0 1 0 0 1
0 1 0 1 0 0
1 0 1 0 1 0
0 0 0 1 0 1
0 1 0 0 1 0
0 1 0 0 1 0
1 0 1 0 0 0
0 1 0 1 0 1
0 0 1 0 1 0
1 0 0 1 0 1
0 0 1 0 1 0
矩阵表示顶点邻接。如果两个顶点相邻,则它们的对为 1。 尽管这些图在视觉上没有分开,但第二张图在第一张图的第 6 行之后开始。 每个图可以有很多顶点,比如 5000 个,并且它们的大小相同(图)。 我编写了一个算法来检查两个图是否同构,我注意到读取这些图需要 8 秒,而实际算法需要 2.5 秒(对于 5000 个顶点)。 由于我的目标是优化程序的整体速度,我想知道我是否可以改进(在速度方面)我当前从文件读取的代码:
FILE* file = fopen ("input.txt", "r");
fscanf (file, "%d", &i);
int n = i;
while (!feof (file))
{
fscanf (file, "%d", &i);
if (j < (n*n)) { // first graph
if (i==1) {
adj_1[j/n][v_rank_1[j/n]] = j - (j/n)*n; // add the vertice to the adjacents of the current vertice
v_rank_1[j/n] += 1;
}
}
else if (j>=(n*n)) { // second graph
if (i==1) {
adj_2[(j-(n*n))/n][v_rank_2[(j-(n*n))/n]] = (j-(n*n)) - ((j-(n*n))/n)*n; // add the vertice to the adjacents of the current vertice
v_rank_2[(j-(n*n))/n] += 1;
}
}
j++;
}
fclose (file);
adj_* 表保存了一个顶点的相邻顶点的索引
v_rank_* 表保存与顶点相邻的顶点数
重要的是我从图表中获取此信息,并且仅获取此信息。
【问题讨论】:
-
This answer 可能相关并且您可能感兴趣。
-
旁白:我看到您在尝试读取文件之前正在使用
feof。这是错误的,请参阅stackoverflow.com/questions/5431941/… 并阅读feof的手册页。我建议将循环更改为while (1 != fscanf (file, "%d", &i)) -
@WeatherVane 哦,很抱歉,我没有提供之前打开文件的代码并读取了顶点数(代码中很早)。现在添加了
-
数字是否保证都是个位数?
-
@Crone 您添加的代码不会原谅使用
while (!feof())。这是完全错误的,虽然离题了。
标签: c input graph text-files