Pagini recente » Cod sursa (job #1993187) | Cod sursa (job #3234557) | Cod sursa (job #837665) | Cod sursa (job #1874634) | Cod sursa (job #569654)
Cod sursa(job #569654)
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<queue>
#include<vector>
using namespace std;
vector <int>b[10000];
int minim,x[1000],ga[1000],muz[1000],t,lung,n,m,a[1000][1000],viz[1000];
queue <int>c;
int parcurg(int i)
{
c.push(i);
viz[i]=1;
int l=1,j,k=1;
//v[k][l]=i;
//l++;
while(c.size()>0)
{
for(j=1;j<=n;j++)
if((a[c.front()][j]==1)&&(viz[j]==0))
{
c.push(j);
viz[j]=1;
// v[k][l++]=j;
}
k++;
c.pop();
//l=1;
}
//lung=k-1;
}
int Validare(int k)
{ int i,ok;
ok=1;
for(i=1;i<=k-1;i++)
{
if (x[i]==x[k])
ok=0;
}
return ok;
}
void Back(int k,int j)
{
int i,nr;
if (x[k-1]==muz[j])
{nr=0;
for(int fi=1;fi<k-1;fi++)
if(a[x[fi]][x[fi+1]]==0)
nr++;
if(nr<minim)
minim=nr;
//cout<<nr;
}
else
for(i=0;i<b[x[k-1]].size();i++)
{
x[k]=b[x[k-1]][i];
if (Validare(k)==1)
Back(k+1,j);
}
}
int main()
{
ifstream f("obiective.in");
f>>n>>m;
ofstream g("obiective.out");
int i,k,i1,j1,j;
minim=32000;
for(i=1;i<=m;i++)
{
f>>i1>>j1;
a[i1][j1]=1;
b[i1].push_back(j1);
b[j1].push_back(i1);
}
f>>t;
for(i=1;i<=t;i++)
f>>ga[i]>>muz[i];
for(j=1;j<=t;j++)
{
parcurg(ga[j]);
k=2;
minim=32000;
x[1]=ga[j];
if(viz[muz[j]]==0)
{
Back(2,j);
g<<minim<<endl;
}
else g<<0<<endl;
memset(viz,0,n);
}
return 0;
}