html — ошибка графика dfs во время выполнения

   #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=3, v=5 поэтому ребра будут 5,8 и 8,11 и 11,14 и т. д., пока 2-й член не станет меньше числа вершин.

0

Решение

У вас есть глобальная переменная

vector<bool> visited;

к которым вы получаете доступ в разных местах, например

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

Нигде вы не делаете его достаточно большим для узлов вашего графа.


РЕДАКТИРОВАТЬ

Для самого графика вы сделали его достаточно большим, чтобы вместить f Предметы:

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

Поступать так же с visited может помочь:

visited = vector<bool> (f);

Я подозреваю, что здесь есть и другие проблемы, но это не поможет.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector