日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深搜入门DFS

發布時間:2025/3/17 编程问答 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深搜入门DFS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、什么是深搜?

? ? ? ? 深度優先搜索屬于圖算法的一種,英文縮寫為DFS,即 Depth First Search。其過程簡要來說是對每一個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次。

? ? ? ? 舉例說明之:下圖是一個無向圖,如果我們從A點發起深度優先搜索(以下的訪問次序并不是唯一的,第二個點既可以是B也可以是C,D),則我們可能得到如下的一個訪問過程:A->B->E(沒有路了,回溯到A),A->C->F->H->G->D(沒有路,最終回溯到A,A也沒有未訪問的相鄰節點,本次搜索結束)。

2、深搜框架

void backtrack(int t)
{
? ? ? ? if ( t>n) ? ? ?// t:遞歸深度,即當前擴展結點在解空間樹中的深度,t>n,搜索至葉子結點
? ? ? ? ? ? output(x) ?// 記錄或輸出可行解
? ? ? ? else
? ? ? ? ? ? for i=start to end ? // strat,end,當前擴展點處未搜索過的子樹的起始編號和終止編號
? ? ? ? ? ? {
? ? ? ? ? ? ? ? x[t]=h(i) ? ? ? // h(i):當前擴展點處x[t]的第 i 個可選值
? ? ? ? ? ? ? ? if (當前擴展結點的約束條件)
? ? ? ? ? ? ? ? ? ? backtrack(t+1)
? ? ? ? ? ? }
}

3、從枚舉到深搜

? ? ? ? 一個三位數abc,如果滿足abc = a^3+ b^3+ c^3,那么就把這個數叫做水仙花數。如果一個N位數所有數碼的N次方的和加起來等于這個數字本身,我們把這樣的數叫做廣義水仙花數,現在,我們的任務是,輸入一個m (m<7),讓你求出所有滿足N = m的廣義水仙花數。

樣例輸入1:3? ? ? ? ? 樣例輸出2:153 370 371 407

樣例輸入2:5? ? ? ? ? 樣例輸出:54748 92727 93084

分析:

? ? ? ? 如果是水仙花問題,可以用枚舉,直接求出。代碼如下:

#include <stdio.h> int main() {int i,a,b,c;for(i=100;i<=999;i++){a=i/100;b=i/10%10;c=i%10;if(a*a*a+b*b*b+c*c*c==i)printf("%d ",i);}printf("\n");return 0; }

或:

#include <stdio.h> int main() {int a,b,c;for(a=1;a<=9;a++)for(b=0;b<=9;b++)for(c=0;c<=9;c++)if(a*a*a+b*b*b+c*c*c==a*100+b*10+c)printf("%d%d%d ",a,b,c);printf("\n");return 0; }

? ? ? ? 現在求廣義的水仙花,現在的難點是不知道是幾位數?也不知道是幾次方?循環層數不確定,那么該如何實現m重循環?答案只有一個:就是遞歸,讓系統自動調用函數,自動實現循環。

? ? ? ? 套用上面深搜(回溯)模板,代碼自然而成。

#include <stdio.h> #include <math.h> int n; void flower(int t,int curNum,int curSum) {int i,start;if(t>n){if(curNum==curSum)printf("%d ",curNum);}else{start=(t==1); // 第一位不為0,第一位1~9枚舉,其他位0~9枚舉 for(i=start;i<=9;i++)flower(t+1,curNum*10+i,curSum+(int)pow(i,n));// 縮小問題規模} } int main() {while(scanf("%d",&n) && n){flower(1,0,0);printf("\n");}return 0; }

?

總結

以上是生活随笔為你收集整理的深搜入门DFS的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。