У меня есть задача создать матрицу смежности графа *1003* из списка смежных узлов, сохраненную в файле (без весов) в массив битов в C ++. Я успешно прочитал смежные узлы из файла, но когда я пытаюсь сохранить его в массиве битов, результат не правильный.
Моя функция следующая:
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
ФИ: 2 СИ: 4
ФИ: 3 СИ: 2
ФИ: 3 СИ: 5
ФИ: 4 СИ: 1
ФИ: 4 СИ: 5
ФИ: 4 СИ: 5
000000
000001
011000
001000
000000
000000
Индексы верны, я проверил их, но матрица должна быть следующей (она отражается из-за расположения битов по правой стороне):
000000
010001
001001
000010
000100
011000
Полагаю, ошибка где-то в доступе к элементу bitset, но я не могу понять, что именно не так.
Я ценю любую помощь. Спасибо.