int main()
{
    int kase,F,T,d[10009],u,i;
    sieve(10002);
    scanf("%d",&kase);
    while(kase--)
    {
      scanf("%d %d",&F,&T);
      bool vis[10009]={0};
      q.push(F);
      d[F]=0;
      vis[F]=1;
      while(!q.empty())
      {
        u=q.front();
        q.pop();
        for(i=0;i<c;i++)
        {
         if(!vis[a[i]])
          if(check(u,a[i]))
          d[a[i]]=d[u]+1,q.push(a[i]),vis[a[i]]=1;
        }
      }
      if(vis[T])
       printf("%d\n",d[T]);
      else
       printf("Impossible\n");
    }
    return 0;
}
예제 #2
0
파일: stpar.cpp 프로젝트: archiver/spoj
bool solve(qi &l)
{
   int t;
   si r;

   int i=1;
   bool found=false;
   while(!l.empty())
   {
      t=l.front();
      if(t==i) { found=true; break; }
      r.push(t);
      l.pop();
   }
   if(!found) return false;
   l.pop();
   i+=1;

   while(!l.empty() && !r.empty())
   {
      if(l.front()==i)
	 l.pop();
      else if(r.top()==i)
	 r.pop();
      else
      {  
         found=false;
	 while(!l.empty())
	 {
	    t=l.front();
	    if(t==i) { found=true; break; }
	    r.push(t);
	    l.pop();
	 }
         if(!found) return false;
	 l.pop();
      }
      i+=1;
   }
   return true;
}
void bfs(long start)
{
	long i,next,u;
	d[start]=0;
	vis[start]=1;
	q.push(start);
	while(!q.empty())
	{
		u=q.front();
		q.pop();
		for(i=0;i<gr[u].size();i++)
		{
			next=gr[u][i];
			if(!vis[next])
			{
				q.push(next);
				vis[next]=1;
				d[next]=d[u]+1;
			}
		}
	}
}
long bfs(long start)
{
    long i,u,next,count=0;
    vis[start]=true;
    q.push(start);
    while(!q.empty())
    {
		count++;
		u=q.front();
        q.pop();
        for(i=0; i<gr[u].size(); i++)
        {
            next=gr[u][i];
            if(vis[next]==false)
            {
				
                q.push(next);
                vis[next]=true;
            }    
        }
    }
	
    return count;
}