Algorithm 使用BFS从给定节点查找所有节点的最短路径

Algorithm 使用BFS从给定节点查找所有节点的最短路径,algorithm,c++11,shortest-path,breadth-first-search,Algorithm,C++11,Shortest Path,Breadth First Search,当我增加或减少INF值时,输出的行为出乎意料。。 我认为INF不应该对输出有任何影响。。 每条边的长度为6 输入 1. 4 2 1 2 1 3 1. 输出为6-1 当我将INF更改为1e8时,输出为0 #include<iostream> #include<vector> #include<queue> #include<cstring> using namespace std; #define MAX 2000 #define

当我增加或减少INF值时,输出的行为出乎意料。。 我认为INF不应该对输出有任何影响。。 每条边的长度为6 输入 1. 4 2 1 2 1 3 1. 输出为6-1 当我将INF更改为1e8时,输出为0

 #include<iostream>
 #include<vector>
 #include<queue>
 #include<cstring>

 using namespace std;

 #define MAX 2000
  #define INF 1000000

 vector<int> adj[MAX];
 int d[MAX];
  bool visited[MAX];

 void initialise(){
   for(int i=0;i<=MAX;i++){
  visited[i]=false;
   }
  }

  void shortestPathBfs(int start){

  queue<int> q;
   q.push(start);
     visited[start]=true;
     d[start]=0;

  while(!q.empty()){
      int p=q.front();
       q.pop();
      for(int i=0;i<adj[p].size();i++){
           int v=adj[p][i];
            if(!visited[v] && d[v]>d[p]+6){
                d[v]=d[p]+6;
                q.push(v);
               visited[v]=true;
            }
        }
       }
      }

         int main(){
         int T,N,M,S,x,y;
            cin>>T;
          while(T--){
        cin>>N>>M;
      for(int i=0;i<M;i++){
         cin>>x>>y;
          adj[x].push_back(y);
          adj[y].push_back(x);
      }
      cin>>S;

       initialise();
         memset(d,INF,sizeof(d));
         shortestPathBfs(S);

   for(int i = 1; i <=N; i++) {
        if(i == S)
            continue;
        if(d[i] >= INF)
              cout<<"-1"<<" ";
        else
            cout<<d[i]<<" ";
          }
       }

      }
#包括
#包括
#包括
#包括
使用名称空间std;
#定义最大2000
#定义INF 1000000
向量adj[MAX];
int d[MAX];
布尔拜访了[马克斯];
无效初始化(){
对于(int i=0;i>T;
而(T--){
cin>>N>>M;
对于(inti=0;i>x>>y;
调整[x]。向后推(y);
形容词[y]。推回(x);
}
cin>>S;
初始化();
memset(d,INF,sizeof(d));
最短路径bfs(S);
for(int i=1;i=INF)
问题出在

memset(d,INF,sizeof(d));

memset()
仅使用字节值填充内存。在这里,它将使用
int
INF
的最低有效字节填充数组。要修复它,请为
循环创建一个显式
,或者改用。

另外:如果(!visted[v]&d[v]>d[p]+6){
d[v],则行中的常量6=d[p]+6;
看起来非常可疑……不客气!顺便说一句,如果你觉得有帮助,那么请投票并接受我的答案:)我没有太多的声誉来投票支持你的答案……我会的,我会的。。