0
   #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 等,直到第二项小于顶点数。

4

1 回答 1

0

你有一个全局变量

vector<bool> visited;

您可以在各个地方访问,例如

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

对于图中的节点,您在任何地方都做得不够大。


编辑

对于图表本身,您已使其足够大以容纳f项目:

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

这样做visited可能会有所帮助:

visited = vector<bool> (f);

我怀疑这里还有其他问题,但这无济于事。

于 2013-08-15T10:46:26.383 回答