208 - Firetruck

来源:互联网 发布:冠新软件 中标 编辑:程序博客网 时间:2024/05/01 15:07
#include <cstdio>#include <math.h>#include <algorithm>#include <iostream>#include <cstring>using namespace std;int sum, g[30][30], d[30], en, way[30], l_w;int maxd, flag[30], l_f;int cmp(const void *a, const void *b){return *(int*)a-*(int*)b;}void firstdfs(int cur){    d[cur] = 1;    flag[l_f++] = cur;    for(int i = 1; i <= maxd; i++)        if(g[cur][i] && !d[i])firstdfs(i);    return;}void dfs(int cur){    if(cur == en)    {        sum++;        printf("1");        for(int i = 0; i < l_w; i++)            printf(" %d", way[i]);        printf("\n");        return;    }    for(int i = 0; i < l_f; i++)    {        if(g[cur][flag[i]] && !d[flag[i]])        {            d[flag[i]] = 1;            way[l_w++] = flag[i];            dfs(flag[i]);            l_w--;            d[flag[i]] = 0;        }    }    return;}int main(){    int kase = 1;    while(scanf("%d", &en)!=EOF)    {        memset(g, 0, sizeof(g));        memset(d, 0, sizeof(d));        memset(way, 0, sizeof(way));        int a, b;        maxd = 0;        while(scanf("%d%d", &a, &b), a+b)        {            g[a][b] = g[b][a] = 1;            if(a > maxd) maxd = a;            if(b > maxd) maxd = b;        }        sum = l_w = l_f = 0;        firstdfs(en);        qsort(flag, l_f, sizeof(int), cmp);        memset(d, 0, sizeof(d));        printf("CASE %d:\n", kase++);        d[1] = 1;        dfs(1);        printf("There are %d routes from the firestation to streetcorner %d.\n", sum, en);    }    return 0;}

原创粉丝点击