国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Uva208 Firetruck【dfs】【習題7-1】

2019-11-08 19:47:07
字體:
來源:轉載
供稿:網友

題目:Firetruck

題意:輸入一個n(n≤20)個結點的無向圖以及某個結點k,按照字典序從小到大順序輸出從結點1到結點k的所有路徑,要求結點不能重復經過。

思路:標準的dfs回溯。從1開始枚舉每個點,可以通過的用一個數組記錄,當達到k輸出數組。每次遞歸要遞歸上一步的位置。

我只判斷了其他點與k是否有直接連接,如果沒有連接就說明達不到直接輸出0,否則再搜索。

代碼:

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int maxn = 21;int G[maxn][maxn],k,maxPoint,ans;int visit[maxn];void dfs(int steps,int location,int path[]){    if(location == k){        for(int i=0;i<steps-1;i++){            PRintf("%d ",path[i]);        }        printf("%d/n",path[steps-1]);        ans++;        return ;    }    for(int i=2;i<=maxPoint;i++){        if(G[location][i] && !visit[i]){           visit[i] = 1;           path[steps] = i;           dfs(steps+1,i,path);           visit[i] = 0;        }    }}int main(){    int u,v,kcase = 1;    while(scanf("%d",&k)!=EOF && k){        maxPoint = 0;        memset(G,0,sizeof(G));        while(scanf("%d%d",&u,&v) && (u || v)){            G[u][v] = G[v][u] = 1;            maxPoint = max(maxPoint,max(u,v));        }        ans = 0;        printf("CASE %d:/n",kcase++);        bool flag = 0;        for(int i=1;i<=maxPoint;i++)            if(G[k][i]) {flag = 1;break;}        if(flag){            memset(visit,0,sizeof(visit));            int path[maxn] = {1};            dfs(1,1,path);        }        printf("There are %d routes from the firestation to streetcorner %d./n",ans,k);    }    return 0;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 颍上县| 泰兴市| 公安县| 镶黄旗| 济宁市| 莆田市| 嘉峪关市| 东乌珠穆沁旗| 苍山县| 平远县| 田东县| 浦北县| 潼关县| 平利县| 杂多县| 奉节县| 松滋市| 梁山县| 丰宁| 郁南县| 大埔县| 黄大仙区| 青龙| 芒康县| 保德县| 尚志市| 旬阳县| 南城县| 邛崃市| 广州市| 永登县| 镇康县| 远安县| 兴安盟| 得荣县| 长垣县| 织金县| 吕梁市| 蒙城县| 开封县| 南乐县|