208UVA救火车

来源:互联网 发布:流程图软件visio下载 编辑:程序博客网 时间:2024/05/29 13:23

第一次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);}}



0 0