藍橋杯倒計時41天!DFS進階1——回溯

DFS進階1——回溯

先說一下回溯的板子

dfs(){
for(......){標記信息dfs()撤銷標記
}
}
回溯模板——遞歸實現排列型枚舉
題目分析

其實就是對1~n的數字全排列,這里就可以用dfs去做,1~n全排列我其實是確定每一個位置我應該放哪一個數字,那么dfs的時候就是對位置dfs,dfs(1)表示我現在要選擇一個數放在第一個位置,那么可以選擇的范圍是1~n,

for(int i = 1;i <= n;i++)

且這個數之前沒有被選過,那么我們就要用一個數組book[i]標記一下,book[i]=1表示這個數已經被選走了,那么我就不能再選這個數了。

for(int i = 1;i <= n;i++){if(book[i]==1) continue;
}

當我遍歷到dfs(n+1)時說明我前n個位置都安排完了,那么我就要輸出此時的一個排列,我需要知道我此時選出來的數的排列,那么也可以考慮用一個變量保存,這里我使用的是隊列。

if(k==n+1) {ArrayDeque<Integer> queueTemp = new ArrayDeque<Integer>();queueTemp.addAll(queue);while(!queueTemp.isEmpty()) {System.out.print(queueTemp.pollFirst() + " ");}System.out.println();return;}

當我選擇數i作為當前位置的數時,我要標記這個數已經被選擇了并且把它放入隊列,這個位置選好后,我要繼續選擇下一個位置,所以dfs(k+1)

for(int i = 1;i <= n;i++) {if(book[i]==1) continue;book[i]=1;queue.addLast(i);dfs(k+1);}

當我從dfs退出后再次回來,說明我要嘗試選擇其它數了,那么我要把選這個數做的標記都撤銷,包括,book數組對應位置置為0和把這個數從隊列里面拿出來。

for(int i = 1;i <= n;i++) {if(book[i]==1) continue;book[i]=1;queue.addLast(i);dfs(k+1);book[i]=0;queue.pollLast();}
題目代碼
import java.util.ArrayDeque;
import java.util.Scanner;
public class Main{static ArrayDeque<Integer> queue = new ArrayDeque<Integer>();static int book[];static int n;
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);n = scanner.nextInt();book = new int[n+1];dfs(1);
}private static void dfs(int k) {// TODO Auto-generated method stubif(k==n+1) {ArrayDeque<Integer> queueTemp = new ArrayDeque<Integer>();queueTemp.addAll(queue);while(!queueTemp.isEmpty()) {System.out.print(queueTemp.pollFirst() + " ");}System.out.println();return;}for(int i = 1;i <= n;i++) {if(book[i]==1) continue;book[i]=1;queue.addLast(i);dfs(k+1);book[i]=0;queue.pollLast();}
}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/714128.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714128.shtml
英文地址,請注明出處:http://en.pswp.cn/news/714128.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt程序設計-解析和生成json詳解

目錄 概述 JSON的兩種結構 解析和生成json 解析對象結構 生成對象結構

【MySQL】mvcc以及三個重要日志

&#x1f34e;個人博客&#xff1a;個人主頁 &#x1f3c6;個人專欄&#xff1a;【】數據庫 ?? 功不唐捐&#xff0c;玉汝于成 目錄 前言 正文 MVCC關鍵概念&#xff1a; MVCC機制的優點&#xff1a; 三個重要的日志&#xff1a; 重做日志&#xff1a; 回滾日志&am…

【Java項目介紹和界面搭建】拼圖小游戲——打亂圖片順序

&#x1f36c; 博主介紹&#x1f468;?&#x1f393; 博主介紹&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高興認識大家~ ?主攻領域&#xff1a;【滲透領域】【應急響應】 【Java】 【VulnHub靶場復現】【面試分析】 &#x1f389;點贊?評論?收藏 …

再次走到了個人發展的十字路口

人生有非常多的十字路口 諸如&#xff1a;大學選擇專業、畢業選擇公司、選擇技術方向、兩年發展方向、三年發展方向、五年發展方向。 在之前&#xff0c;我選擇深入做elasticsearch&#xff0c;做專精es搜索和優化。做了大概4年時間。 但是現在又走到了很難抉擇的十字路口 第…

網絡仿真(一)

網絡仿真的意義 在網絡規劃和設計、網絡設備研發、網絡協議開發中&#xff0c;需要一種手段來反映和預測網絡的性能 網絡仿真可以提高網絡規劃設計的可靠性和準確性&#xff0c;明顯降低網絡投資風險&#xff0c;減少不必要的浪費 Ns-2 is a discrete event simulator Sched…

持安科技亮相張江高科895創業營,總評分第三名榮獲「最具創新性企業」!

近日&#xff0c;張江高科895創業營&#xff08;第十三季&#xff09;信息安全專場Demo day&結營儀式在上海集成電路設計產業園圓滿落幕。本季創業營通過多種渠道在海內外甄選優秀創業項目&#xff0c;一共擇優錄取了29家入營&#xff0c;最終甄選出9家代表參加Demo day路演…

ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl‘報錯解決

安裝labelme出錯了 根據爆棧的提示信息&#xff0c;我在cmd運行以下命令之后一切正常了&#xff0c;解決了問題&#xff01; pip install urllib31.26.6參考網址&#xff1a;ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1, currently the ‘ssl’ module is compile…

一文徹底搞懂基于數組和鏈表分別實現LRU算法

文章目錄 1. LRU算法2. 基于數組實現LRU算法3. 基于鏈表實現LRU算法 1. LRU算法 常見的緩存淘汰策略有三種&#xff0c;分別是&#xff1a;先進先出策略FIFO&#xff08;First In&#xff0c;First Out&#xff09;、最少使用策略LFU&#xff08;Least Frequently Used&#x…

董兆祥出席工業廢水資源化,開創變廢為寶新途徑演講

演講嘉賓&#xff1a;董兆祥 董事長 河北奧博水處理有限公司 演講題目&#xff1a;工業廢水資源化&#xff0c;開創變廢為寶新途徑 會議簡介 “十四五”規劃中提出&#xff0c;提高工業、能源領城智能化與信息化融合&#xff0c;明確“低碳經濟”新的戰略目標&#xff0c;熱…

springcloud:3.2測試超時機制

服務提供者 Openfeign遠程調用服務提供者搭建 文章地址http://t.csdnimg.cn/06iz8 PaymentController【控制層】 /*** 測試超時機制** return*/GetMapping("/timeout")public String TimeOut() {try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {…

應用層DDoS防護:理解、必要性與實現策略

一、應用層簡介 應用層&#xff0c;也稱作第七層&#xff0c;是OSI&#xff08;開放系統互聯&#xff09;模型中的最高層。在這一層&#xff0c;數據以特定的應用程序協議格式進行傳輸&#xff0c;如HTTP、FTP、SMTP等。應用層的主要職責是為用戶提供網絡服務&#xff0c;如文…

【筆記】Android Telephony 獲取SubscriptionManager和TelephonyManager

背景 早期的手機只有單卡 &#xff0c;基本用默認卡&#xff08;代碼如下&#xff09;&#xff0c;那么雙卡手機的業務邏輯就會存在問題。 //手動搜網的功能案例&#xff0c;根據卡槽/Phone對象直接獲取信息private Context mcontext context; private Phone mPhone PhoneF…

LeetCode 560. 和為 K 的子數組

由于題目要求子數組必須連續&#xff0c;也就是需要一個和為K的區間&#xff0c;可以利用前綴和預處理后&#xff0c;枚舉找到這些區間段[l,r]&#xff0c;使之滿足s[r] - s[l] k。 不理解前綴和的可以先看這里。 class Solution { public:int subarraySum(vector<int>…

MongoDB聚合運算符:$count

文章目錄 語法使用舉例在$group階段中使用在$setWindowFields階段使用 $count聚合運算符返回分組中文檔的數量。從5.0開始支持。 語法 { $count: { } }$count不需要參數 使用 $count可以用于下列聚合階段&#xff1a; $bucket$bucket$group$setWindowFields 在$group階段中…

【vuex之五大核心概念】

vuex:五大核心概念 一、state狀態1.state的含義2.如何訪問以及使用倉庫的數據&#xff08;1&#xff09;通過store直接訪問獲取store對象 &#xff08;2&#xff09;通過輔助函數MapState 二、mutations1.作用2.嚴格模式3.操作流程定義 mutations 對象&#xff0c;對象中存放修…

Freesia 項目引用的依賴

UML圖 項目總依賴 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.0</version> </parent> <groupId>com.freesia</groupId> <artifa…

計算機網絡_2.1 物理層概述

2.1 物理層概述 一、物理層要實現的功能二、物理層接口特性 B站 深入淺出計算機網絡 2.1物理層概述 一、物理層要實現的功能 物理層要實現的功能就是在各種傳輸媒體上傳輸比特0和1&#xff0c;進而給上面的數據鏈路層提供透明傳輸比特流的服務。 數據鏈路層“看不見”&#xff…

劍指offer面試題22:鏈表中倒數第k個節點

面試題22&#xff1a;鏈表中倒數第k個節點 題目&#xff1a; 實現一種算法&#xff0c;找出單向鏈表中倒數第 k 個節點。返回該節點的值。 示例&#xff1a; 輸入&#xff1a; 1->2->3->4->5 和 k 2 輸出&#xff1a; 4思路&#xff1a; 1、求倒數第k個節點的…

設計模式-命令模式(Command Pattern)

承接Qt/C軟件開發項目&#xff0c;高質量交付&#xff0c;靈活溝通&#xff0c;長期維護支持。需求所尋&#xff0c;技術正適&#xff0c;共創完美&#xff0c;歡迎私信聯系&#xff01; 一、命令模式的說明 命令模式&#xff08;Command Pattern&#xff09;是一種行為設計模式…

跨境代購系統獨立站:掌握核心競爭優勢,打造專業國際購物體驗

跨境代購系統獨立站&#xff08;獲取代購系統獨立站演示&#xff09;的核心競爭優勢可能包括&#xff1a; 獨立性&#xff1a;獨立站不依賴于任何第三方電商平臺&#xff0c;擁有自己的域名和網站空間&#xff0c;可以自主控制網站的設計和內容。靈活性&#xff1a;獨立站不受…