簡體   English   中英

圖DFS運行時錯誤

[英]Graph dfs runtime error

   #include<iostream>
   #include<vector>
   #include <iterator>
   #include<stdio.h>

   using namespace std;
   int t,i,u,v,f,e,a,b,flag=0,flag2=0;
   vector<bool> visited;
   int flag3=0;
   vector<vector<int> > graph;

   void dfs(int u)
   {
     visited[u]=true;
     printf("u=%d ",u);
     if(u==a)
     flag=1;
     if(u==b)
       flag2=1;
     if(flag==1&&flag2==1)
     {
       flag3=1;
     }

     for(vector<int>::iterator it=graph[u].begin();it!=graph[u].end();it++)
     {
        if(!visited[*it])
        dfs(*it);
     }
   }

   int main()
   {
     cin>>t;
     printf("%d",t);
     int j;
     for(j=0;j<t;j++)
     {
       cin>>f>>e>>a>>b;

       graph = vector<vector<int> > (f);
       for(i=1;i<=e;i++)
       {
         cin>>u>>v;
         //printf("%d %d\n",u,v);
          int old=u;
          while(1)
          {
            u=v;
            v=u+old;
            if(v>f)
              break;
            //printf("l2 u=%d v=%d\n",u,v);
            graph[u].push_back(v);
            graph[v].push_back(u);
            //printf("%d %d\n",u,v);
          }
          //printf("l1 u=%d v=%d\n",u,v);
        }
        for(i=0;i<f;i++)
            visited[i]=false;

        for(i=0;i<f;i++)
        {
          if(visited[i]==true)
          {
            cout<<visited[i]<<endl;
            continue;
          }
          flag=0;
          flag2=0;
          printf("\n");
          dfs(i);
        }
        if(flag3==1)
          printf("It is possible to move the furniture.\n");
        else
          printf("The furniture cannot be moved.\n");
        printf("%d\n",j);
      }
      return 0;
     }

這是位於http://www.spoj.com/problems/SCRAPER/的問題代碼。

我使用dfs解決了C ++向量的問題。

對於測試用例

1
1000 2 500 777
2 3
2 1

或任何其他測試用例,我都收到SIGSEVG錯誤。 為什么?

假設u=3v=5那么邊將是5,8和8,11和11,14等,直到第二項小於頂點數為止。

你有一個全局變量

vector<bool> visited;

您可以在各個地方訪問的內容,例如

if(visited[i]==true)
...
if(!visited[*it])

對於圖中的節點,您無處使其足夠大。


編輯

對於圖形本身,您已使其足夠容納f項目:

graph = vector<vector<int> > (f);

與同樣做visited可能會有所幫助:

visited = vector<bool> (f);

我懷疑這里還有其他問題,但這無濟於事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM