我正在尝试使用广度优先搜索来查找图表上最短的浴缸 所有节点的权重为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;是节点数
答案 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;
}