#include <stdio.h>
#include <iostream>
using namespace std;
int main(void)
{
bool premiereLignefaite = false;
//Lire le fichier
FILE * graphe = fopen("graphe.txt", "r");
//Fichier de sortie
FILE * resultat = fopen("resultat.txt", "w");
int nbr1, nbr2;
int *matrice; //pointeur vers la matrice d'adjacence
//Ligne lue
static char ligne[50];
while (fgets(ligne, 50, graphe) != NULL) //retourne 0 quand on a end-of-file
{
//La premiere ligne est différente
if (premiereLignefaite == false) {
//Initialiser une matrice d'adjacence NxN
sscanf(ligne, "%d %d", &nbr1, &nbr2);
matrice = new int(nbr1 * nbr1); //Memoire dynamique pour la matrice dadjacence n x n
premiereLignefaite = true;
continue;
}
//On construit notre matrice d'adjacence
sscanf(ligne, "%d %d", &nbr1, &nbr2);
matrice[nbr1][nbr2] = 1;
}
int u = 2+2;
return 0;
}
所以我在这一行上收到错误: matrice [nbr1] [nbr2] = 1; 我只是想从文本文件中构建一个邻接列表。我不明白我做错了什么。谢谢。
编辑:由于人们问起这个问题,这是我的图表文件。第一行是顶点的数量和边的数量(没有用的imo) 以下行是我的边缘,我使用第一行为NxN图形分配内存,并使用以下行填充我的邻接矩阵。
9 20
0 1
0 2
1 0
1 2
1 3
1 5
2 0
2 1
2 3
3 1
3 2
3 4
4 3
5 1
5 6
5 7
6 5
6 8
7 5
8 6
答案 0 :(得分:2)
int *matrice;
表示matrice是指向int(或int)的指针,因此matrice[a]
会给你一个int。指针没有关于数组维度的任何信息,因此您无法进行二维访问。
您想要存储数组的尺寸,然后执行
matrice[nbr1 * numberOfColumns + nbr2] = 1;
附注:
new int[nbr1 * nbr2]
?答案 1 :(得分:1)
matrice
声明为int *
,使其成为一个单一维数组。它无法作为多维数组matrice[nbr1][nbr2]
进行访问。还要检查内存分配代码。它应该是new int[nbr1 * nbr2]
,而不是new int(nbr1 * nbr2)
。
答案 2 :(得分:1)
matrice[x]
与*(matrice+x)
相同,matrice[x][y]
与*(*(matrice+x)+y)
相同。
所以问题在于,当你写matrice[nbr1][nbr2]
时,这与写*(*(matrice+nbr1)+nbr2)
相同。由于matrice
只是一个指针,而不是指针的指针,因此这当然不起作用。