Pagini recente » Cod sursa (job #2815750) | Cod sursa (job #1679580) | Cod sursa (job #1700483) | Cod sursa (job #2175948) | Cod sursa (job #569684)
Cod sursa(job #569684)
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<queue>
#include<vector>
using namespace std;
vector <int>b[30000],a[30000];
int minim,x[30000],ga,muz,t,n,m;
unsigned char viz[30000];
int parcurg(int i)
{
queue <int>c;
int nd;
c.push(i);
viz[i]=1;
int l=1,j,k=1;
//v[k][l]=i;
//l++;
while(c.size()>0)
{
nd=c.front();
for(j=0;j<a[nd].size();j++)
if((viz[a[nd][j]]==0))
{
c.push(a[nd][j]);
viz[a[nd][j]]=1;
if(muz==a[nd][j])
return 1;
// v[k][l++]=j;
}
k++;
c.pop();
//l=1;
}
//lung=k-1;
}
int Validare(int k)
{ int i,ok;
for(i=1;i<=k-1;i++)
if (x[i]==x[k])
return 0;
return 1;
}
void Back(int k,int j)
{
int i,nr,l;
if (x[k-1]==muz)
{nr=0;
for(int fi=1;fi<k-1;fi++)
{ int ok=1;
for(l=0;l<a[x[fi]].size();l++)
if(a[x[fi]][l]==x[fi+1])
ok=0;
if(ok==1) 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=100000;
for(i=1;i<=m;i++)
{
f>>i1>>j1;
a[i1].push_back(j1);
//a[i1][j1]=1;
b[i1].push_back(j1);
b[j1].push_back(i1);
}
f>>t;
for(j=1;j<=t;j++)
{
f>>ga>>muz;
parcurg(ga);
k=2;
minim=100000;
x[1]=ga;
if(viz[muz]==0)
{
Back(2,j);
g<<minim<<endl;
}
else g<<0<<endl;
memset(viz,0,n);
}
return 0;
}