为什么在bfs c ++中运行时错误

时间:2018-03-24 10:52:42

标签: c++

我正在尝试使用广度优先搜索来查找图表上最短的浴缸 所有节点的权重为6 这是我的代码:

#include <bits/stdc++.h>
#define pb push_back
using namespace std;
bool vis[1200];
int dist[1200];
vector< int > edges[1200];
int main()
{
    int q ;
    cin>>q;
    while(q--)
    {
        int n,m;
        cin>>n>>m;
        for(int i=0; i<m; i++)
        {
            int u,v;
            cin>>u>>v;
            edges[u].pb(v);
            edges[v].pb(u);
        }
        int s;
        cin>>s;
        queue <int> q;
        q.push(s);
        vis[s]=true;
        while(!q.empty())
        {
            int node=q.front();
            q.pop();
            for(int i=0; i<edges[node].size(); i++)
            {
                if(!vis[edges[node][i]])
                {
                    dist[edges[node][i]]=dist[node]+6;
                    q.push(edges[node][i]);
                }
            }
        }
        for(int i=1;i<=n;i++){
            if(i==s)
                continue;
            if(dist[i]==0)
                cout<<-1<<' ';
            else
                cout<<dist[i]<<' ';
        }
        memset(vis,0,sizeof vis);
        memset(dist,0,sizeof dist);
        for(int i=0;i<1200;i++){
            edges[i].clear();
        }
        cout<<endl;
    }
    return 0;
}

&#39; S&#39;是起始节点 如果任何节点我不能达到然后打印-1 &#39; Q&#39;是查询的数量 &#39;米&#39;是边数 &#39; N&#39;是节点数

1 个答案:

答案 0 :(得分:0)

  

将弹出的节点标记为已访问,这将解决您的运行时错误。

#include <bits/stdc++.h>
#define pb push_back
using namespace std;
bool vis[1200];
int dist[1200];
vector< int > edges[1200];
int main()
{
    int q ;
    cin>>q;
    while(q--)
    {
        int n,m;
        cin>>n>>m;
        for(int i=0; i<m; i++)
        {
            int u,v;
            cin>>u>>v;
            edges[u].pb(v);
            edges[v].pb(u);
        }
        int s;
        cin>>s;
        queue <int> q;
        q.push(s);
        vis[s]=true;
        while(!q.empty())
        {
            int node=q.front();
            q.pop();
            // mark this popped node as visited 
            vis[node] = true;
            for(int i=0; i<edges[node].size(); i++)
            {
                if(!vis[edges[node][i]])
                {
                    dist[edges[node][i]]=dist[node]+6;
                    q.push(edges[node][i]);
                }
            }
        }
        for(int i=1;i<=n;i++){
            if(i==s)
                continue;
            if(dist[i]==0)
                cout<<-1<<' ';
            else
                cout<<dist[i]<<' ';
        }
        memset(vis,0,sizeof vis);
        memset(dist,0,sizeof dist);
        for(int i=0;i<1200;i++){
            edges[i].clear();
        }
        cout<<endl;
    }
    return 0;
}