【发布时间】:2011-03-31 19:35:05
【问题描述】:
我的任务是从相邻节点列表中创建 图的邻接矩阵,存储在 file(不需要权重)中,放入 C++ 中的位集数组中。我成功地从文件中读取了相邻节点,但是当我尝试将其存储在 bitset 数组中时,结果不正确。
我的功能如下:
bitset<N>* read_graph(string filepath)
{
FILE *fp;
char line[100];
bitset<N> bs[N];
fp = fopen(filepath.c_str(), "r");
if(fp != NULL)
{
while(!feof(fp))
{
fgets(line, 100, fp);
//cout << line << endl;
if(line[0] == 'a')
{
string str = "";
int i(0);
for(i = 2; line[i] != ' '; i++)
{
if(line[i] != ' ')
{
str += line[i];
}
}
int fi = atoi(str.c_str());
i++;
str = "";
for(int j = i; line[j] != ' '; j++)
{
if(line[j] != ' ')
{
str += line[j];
}
}
int si = atoi(str.c_str());
si--;
fi--;
//cout << "string: " << str << endl;
cout << "fi: " << fi;
//cout << "string: " << str << endl;
cout << " si: " << si << endl;
bs[fi][si]= 1;
}
}
}
fclose(fp);
return bs;
}
结果如下(fi 代表第一个索引,si 代表第二个索引):
sample.gr
fi: 0 si: 1
fi: 0 si: 2
fi: 1 si: 3
fi: 2 si: 4
fi: 3 si: 2
fi: 3 si: 5
fi: 4 si: 1
fi: 4 si: 5
fi: 4 si: 5000000
000001
011000
001000
000000
000000
索引是正确的,我已经检查过了,但是矩阵应该如下(由于bitset的右侧定位,它被镜像):
000000
010001
001001
000010
000100
011000
我猜这个错误是在访问 bitset 元素的某个地方,但我无法找出究竟是什么错误。
感谢您的帮助。谢谢。
【问题讨论】:
-
第一个观察:不能返回指向本地定义数组 bs 的指针。当函数返回时,这将被销毁。
-
也许你可以给我们看一个输入文件的样本,并描述它应该是什么意思?有一些明显的问题,例如
while (!feof(whatever)),但几乎不可能猜测它们与您所看到的问题有什么关系(甚至是否)。 -
在第一行,“文件”是一个样本的链接。但是 我已经设法解决了它,在我根据 mkluwe 的评论对其进行了修改之后。非常感谢!
标签: c++ arrays graph bitset adjacency-matrix