第一次TLE,看了http://blog.csdn.net/shuangde800/article/details/7750427 的博客才知道,要先排除那些不可能通往destination的路去掉!!!!
这里就是造成TLE 和 AC0.000的区别!!!
这道题udebug有很多测试数据
#include<queue>
using namespace std;
#include<stdio.h>
#include<string.h>
int gra[30][30];
int vis[30];
int route[30];
int dest;
int numnode;
int way;
void road(int cur,int node)
{
if(node == dest)
{
for(int i =0;i<cur;i++)
printf("%d ",route[i]);
printf("%d",node);
putchar(10);
way++;
return;
}
route[cur]=node;
vis[node]=1;
for(int i=1;i <= numnode;i++)
{
if(gra[node][i]==2&&!vis[i])
{
road(cur+1,i);
}
}
vis[node]=0;
}
void bfs(int start)
{
queue<int> que;
que.push(start);
while(!que.empty())
{
int s=que.front();que.pop();
for(int i=1;i <=numnode;i++)
{
if(gra[s][i]==1)
{
que.push(i);
gra[s][i]=gra[i][s]=2;
}
}
}
}
int main()
{
//
freopen("input.txt","r",stdin);
freopen("out.txt","w",stdout);
int numcase=1;
while(scanf("%d",&dest)==1)
{
int u,v;
memset(gra,0,sizeof(gra));
memset(vis,0,sizeof(vis));
memset(route,0,sizeof(route));
numnode=0;
way=0;
while(scanf("%d%d",&u,&v)==2)
{
if(!u&&!v) break;
gra[u][v]=gra[v][u]=1;
numnode = numnode>u?numnode:u;
numnode = numnode>v?numnode:v;
}
printf("CASE %d:\n",numcase++);
bfs(dest);
road(0,1);
printf("There are %d routes from the firestation to streetcorner %d.\n",way,dest);
}
}