首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dijkstra算法在c++程序中的分割错误

dijkstra算法在c++程序中的分割错误
EN

Stack Overflow用户
提问于 2014-03-06 22:20:56
回答 2查看 344关注 0票数 0

这是我的代码..我试着检测错误,但它编译正确,然后在执行时出现分段错误…

代码语言:javascript
复制
#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()函数中查找最短路径的循环中。但是我仍然不能弄清楚问题所在。请帮帮我。:-|

EN

回答 2

Stack Overflow用户

发布于 2014-03-06 22:35:34

看起来你有很多初始化的问题,但是有了这个改变,你所说的错误就会消失。

在函数int min(int dis[],bool vis[],int n)中,将index初始化为zero

代码语言:javascript
复制
int index=0
票数 2
EN

Stack Overflow用户

发布于 2014-03-06 22:44:41

只有一个简单的问题:在min(...)中,参数列表中的n是哪个nngraph::n还是n

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22227212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档