Pagini recente » Cod sursa (job #2312970) | Cod sursa (job #31990) | Cod sursa (job #1347426) | Cod sursa (job #2480348) | Cod sursa (job #569665)
Cod sursa(job #569665)
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<queue>
#include<vector>
using namespace std;
vector <int>b[10000];
int minim,x[10000],ga,muz,t,n,m;
unsigned char viz[10000], a[10000][10000];
int parcurg(int i)
{
queue <int>c;
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;
if(muz==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;
if (x[k-1]==muz)
{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(j=1;j<=t;j++)
{
f>>ga>>muz;
parcurg(ga);
k=2;
minim=32000;
x[1]=ga;
if(viz[muz]==0)
{
Back(2,j);
g<<minim<<endl;
}
else g<<0<<endl;
memset(viz,0,n);
}
return 0;
}