UVA 208 Firetruck

来源:互联网 发布:网络项目传销名单 编辑:程序博客网 时间:2024/06/03 02:46

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19858


题意:给一个无向图,起点为1,终点为k,按照字典序输出所有可行路径。


思路:可以先用floyd判断一下图的连通性,对于那些不能到达目标的点,我们一开始就排除掉,然后就用dfs+回溯搜索一下即可。


#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <cstdlib>#include <iostream>#include <algorithm>#include <stack>#include <map>#include <set>#include <vector>#include <sstream>#include <queue>#include <utility>using namespace std;#define rep(i,j,k) for (int i=j;i<=k;i++)#define Rrep(i,j,k) for (int i=j;i>=k;i--)#define Clean(x,y) memset(x,y,sizeof(x))#define LL long long#define ULL unsigned long long#define inf 0x7fffffff#define mod %100000007#define mp make_pair#define fi first#define se second#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define mid int m=(l+r)>>1bool b[30][30];int aim;int T = 0;int a[30][30];bool flag[30];int tx,ty;int ans;int m;int out[30];void dfs(int x,int k){    if ( x == aim )    {        ans++;        rep(i,1,k) printf("%d%c",out[i],(i==k)?'\n':' ');        return;    }    rep(i,1,m)        if ( flag[i] && a[x][i] )        {            flag[i] = false;            out[k+1] = i;            dfs(i,k+1);            flag[i] = true;        }}int main(){    while(cin>>aim)    {        //if ( T++ ) puts("");        printf("CASE %d:\n",++T);        m = 1;        Clean(a,false);        Clean(b,false);        Clean(flag,true);        ans = 0;        while(~scanf("%d%d",&tx,&ty))        {            m = max( m , max(tx,ty) );            if ( tx + ty == 0 ) break;            a[tx][ty] = true;            a[ty][tx] = true;            b[ty][tx] = true;            b[tx][ty] = true;        }        rep(i,1,m)            rep(j,1,m)                rep(k,1,m)                if ( b[i][k] && b[k][j] ) b[i][j] = true;        rep(i,1,m) if ( !b[i][aim] && i!=aim ) flag[i] = false;        flag[1] = false;        out[1] = 1;        dfs(1,1);        printf("There are %d routes from the firestation to streetcorner %d.\n",ans,aim);    }    return 0;}


0 0