graph — Ошибка сегментации в c ++ программе для алгоритма Дейкстры

Это мой код … Я пытался обнаружить ошибку, но она правильно компилируется, а затем выдает ошибку сегментации при выполнении …

#include<iostream>
#include<string>
using namespace std;

#define infinity 999
#define MAX 10

int min(int dis[],bool vis[],int n);
void print_dij(int dis[],int n);

class graph
{
int g[MAX][MAX];
public:
int n;
graph()
{
n=0;
}
void readgraph();
void printgraph();
void dij();
};
void graph::readgraph()
{
int i,j;
cout<<"\nEnter the no of vertices::";
cin>>n;
cout<<"\nEnter the adjacency matrix::";
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
cout<<"\n["<<i<<"]["<<j<<"]::";
cin>>g[i][j];
}
}
}
void graph::printgraph()
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<g[i][j];
cout<<"\n";
}
}
void graph::dij()
{
int dis[20],i,j,start,u;
bool vis[20];
cout<<"\nEnter the index number of starting node::";
cin>>start;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(g[i][j]==0)
g[i][j]=infinity;

for(i=0;i<n;i++)        //Initialising the arrays dis[] and vis[]
{
dis[i]=infinity;
vis[i]=false;
}
dis[start]=0;
for(i=0;i<n-1;i++)         //Finding the shortest path
{
u=min(dis,vis,n);
vis[u]=true;
for(j=0;j<n;j++)
if(!vis[j] && g[u][j] && dis[u]!=infinity && dis[u]+g[u][j]<dis[j])
dis[i]=dis[u]+g[u][j];
}
cout<<"\nThe shortest path is::->>>>>\n";
print_dij(dis,n);
}
int min(int dis[],bool vis[],int n)      //To find the vertex with min distance from the source
{
int index,i,min=infinity;
for(i=0;i<n;i++)
if(vis[i]=false && dis[i]<=min)
{
min=dis[i];
index=i;
}
return index;
}
void print_dij(int dis[],int n)       //To print the shortest path
{
int i;
cout<<"\nVertices\tMinimum distance";
for(i=0;i<n;i++)
{
cout<<"\n"<<i<<"\t"<<dis[i];
}
}
int main()
{
graph g;
int start;
g.readgraph();
cout<<"\nThe entered graph is::\n";
g.printgraph();
g.dij();
return 0;
}

Кажется, что ошибка в цикле поиска кратчайшего пути в функции dij (). Но я все еще не могу понять проблему. Пожалуйста, помогите мне …: — |

0

Решение

Похоже, у вас много проблем с инициализацией, но с этим изменением ваша ошибка будет исправлена.

В функции int min(int dis[],bool vis[],int n) инициализировать index в zero,

int index=0
2

Другие решения

Просто быстрый вопрос: в min(...) n это который n? n является graph::n или же n из списка параметров?

1

По вопросам рекламы [email protected]