搜索(題目)

A.POJ_1321
考查DFS的一個循環中遞歸調用

?

?

?

?

 1 #include<iostream>
 2 #include<cstring>
 3 
 4 using namespace std;
 5 char a[10][10];     //記錄棋盤位置
 6 int book[10];        //記錄一列是否已經放過棋子
 7 int n, k;                // k 為 需要放入的棋子數
 8 int total, m;    //total 是放棋子的方案數 ,m是已放入棋盤的棋子數目
 9 
10 void DFS(int cur)
11 {
12     if (k == m)    {
13         total++;
14         return;
15     }
16     if (cur >= n)    //邊界
17         return;
18     for (int j = 0; j < n; j++)
19         if (book[j] == 0 && a[cur][j] == '#'){   //判斷條件(為#才能在該處下棋)
20             book[j] = 1;           //標記
21             m++;
22             DFS(cur + 1);            //到下一行
23             book[j] = 0;           //改回來方便下一行的判斷
24             m--;
25         }
26     DFS(cur + 1);                //到下一行
27 }
28 
29 int main()
30 {
31     int i;
32     while ((cin >> n >> k) && n != -1 && k != -1){
33         total = 0;
34         m = 0;
35         for (i = 0; i < n; i++)
36             cin >> a[i];
37         // 以上內容都是輸入
38         memset(book, 0, sizeof(book));        // 對于每一組處理完了數據進行數組的清空
39         DFS(0);                              // 進行搜索
40         cout << total << endl;
41     }
42     return 0;
43 }

?

?B.POJ_2251

PS:六個方向的BFS題

?

?

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <queue>
 5 #include <algorithm>
 6 //bfs對于每一層的搜索都是很詳細的可以掃完所有
 7 using namespace std;
 8 
 9 char map[35][35][35];    //    用于建圖
10 int vis[35][35][35];    // 查詢數組 判斷該點是否被訪問了
11 int k, n, m, sx, sy, sz, ex, ey, ez;        //k , n, m,題干要求量; sx, sy, sz,開始坐標值;ex, ey, ez終點坐標值
12 int to[6][3] = { {1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1} }; // 方向向量坐標
13 // 前后左右上下不存在順序限制
14 
15 struct node{    // 定義一個結構體
16     int x, y, z, step;    // x,y,z 表示 node 聲明出來的點的 三個坐標的值 和 該點下的是第幾步
17 };
18 
19 int check(int x, int y, int z){
20     // 若 1.越界 2.是障礙物 3.查詢過 該函數的返回值是 1 否則 則是 0;
21     if (x < 0 || y < 0 || z < 0 || x >= k || y >= n || z >= m)
22         return 1;
23     else if (map[x][y][z] == '#')
24         return 1;
25     else if (vis[x][y][z])
26         return 1;
27     return 0;
28 }
29 
30 int bfs(){
31     int i;
32     node a, next;
33     queue<node> Q;
34     a.x = sx, a.y = sy, a.z = sz;    //    從起點開始掃
35     a.step = 0;
36     vis[sx][sy][sz] = 1;
37     Q.push(a);    // 把元素壓入隊列中
38     while (!Q.empty()){    //    如果隊列q為空就證明沒找到可以通過的路徑
39         a = Q.front();    // 取出隊列第一個元素
40         Q.pop();    //    刪去靠前元素
41         if (a.x == ex && a.y == ey && a.z == ez)
42             return a.step;    //    如果掃到的該點與目標點相同則返回該點對應的步數
43         for (i = 0; i < 6; i++){
44             cout << "a";
45             cout << a.x << a.y << a.z << endl;
46             next = a;
47             next.x = a.x + to[i][0];
48             next.y = a.y + to[i][1];
49             next.z = a.z + to[i][2];
50             // 通過方向向量值改變
51             cout << "next";
52             cout << next.x << next.y << next.z << endl;
53             if (check(next.x, next.y, next.z))
54                 continue;    // 如果下一步的點不和規范就不執行下面步驟
55             cout << "標記next";
56             cout << next.x << next.y << next.z << endl;
57             vis[next.x][next.y][next.z] = 1;
58             next.step = a.step + 1;
59             Q.push(next);
60         }
61     }
62     return 0;
63 }
64 
65 int main(){
66     int i, j, r;
67     while (cin >> k >> n >> m, n + m + k){    // k為牢房個數n,m代表n行m列
68         for (i = 0; i < k; i++){
69             for (j = 0; j < n; j++){
70                 cin >> map[i][j];    //    建圖
71                 for (r = 0; r < m; r++){    // 掃一遍圖 找出起點與終點
72                     if (map[i][j][r] == 'S'){
73                         sx = i, sy = j, sz = r;
74                     }
75                     else if (map[i][j][r] == 'E'){
76                         ex = i, ey = j, ez = r;
77                     }
78                 }
79             }
80         }
81         memset(vis, 0, sizeof(vis));
82         int ans;
83         ans = bfs();
84         if (ans)
85             cout << "Escaped in " << ans << " minute(s)." << endl;
86         else
87             cout << "Trapped!" << endl;
88     }
89     return 0;
90 }

?

轉載于:https://www.cnblogs.com/lightac/p/10534093.html

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

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

相關文章

rest_framework中的url注冊器,分頁器,響應器

url注冊器&#xff1a; 對于authors表&#xff0c;有兩個url顯得麻煩&#xff1a; rest_framework將我們的url進行了處理&#xff1a; 這樣寫了之后&#xff0c;就可以像原來一樣訪問author表了。 故意寫錯路徑&#xff0c;看看它為我們做了哪些配置&#xff1a; 在有關author的…

Alluxio學習

介紹 Alluxio&#xff08;之前名為Tachyon&#xff09;是世界上第一個以內存為中心的虛擬的分布式存儲系統。它統一了數據訪問的方式&#xff0c;為上層計算框架和底層存儲系統構建了橋梁。應用只需要連接Alluxio即可訪問存儲在底層任意存儲系統中的數據。此外&#xff0c;Allu…

freemarker常見語法大全

FreeMarker的插值有如下兩種類型:1,通用插值${expr};2,數字格式化插值:#{expr}或#{expr;format} ${book.name?if_exists } //用于判斷如果存在,就輸出這個值 ${book.name?default(‘xxx’)}//默認值xxx ${book.name!"xxx"}//默認值xxx ${book.date?string(yyy…

網頁排版與布局

一 網站的層次結構 制作便于瀏覽頁面的一個大敵就是視覺干擾,它包含兩類: a,混亂頁面主次不清,所有東西都引人注目 b,背景干擾 1.把頁面分割成清晰明確的不同區域很重要,因為可以使用戶迅速判斷出哪些區域應重點看,哪些可以放心地忽略. 2.創建清晰直觀的頁面層次結構;越重要越要…

Bash的循環結構(for和while)

在bash有三中類型的循環結構表達方法&#xff1a;for&#xff0c;while&#xff0c;until。這里介紹常用的兩種&#xff1a;for和while。 for bash的for循環表達式和python的for循環表達式風格很像&#xff1a; for var in $(ls) doecho "$var"done 取值列表有很多種…

MVVM模式下實現拖拽

MVVM模式下實現拖拽 原文:MVVM模式下實現拖拽在文章開始之前先看一看效果圖 我們可以拖拽一個"游戲"給ListBox,并且ListBox也能接受拖拽過來的數據&#xff0c; 但是我們不能拖拽一個"游戲類型"給它。 所以當拖拽開始發生的時候我們必須添加一些限制條件&a…

nodejs變量

https://www.cnblogs.com/vipyoumay/p/5597992.html

jenkins+Docker持續化部署(筆記)

參考資料&#xff1a;https://www.cnblogs.com/leolztang/p/6934694.html &#xff08;Jenkins&#xff08;Docker容器內&#xff09;使用宿主機的docker命令&#xff09; https://container-solutions.com/running-docker-in-jenkins-in-docker/ &#xff08;Running Docker i…

正則表達式之括號

正則表達式&#xff08;三&#xff09; 括號 分組 量詞可以作用字符或者字符組后面作為限定出現次數&#xff0c;如果是限制多個字符出現次數或者限制一個表達式出現次數&#xff0c;需要使用括號()將多個字符或者表達式括起來&#xff0c;這樣便稱為分組。例如(ab)表示“ab”字…

免安裝Mysql在Mac中的神坑之Access denied for user 'root'@'localhost' (using password: YES)

眼看馬上夜深人靜了&#xff0c;研究了一天的問題也塵埃落定了。 廢話不多說 直接來干貨&#xff01; 大家都知道免安裝版本的Mysql, 在Mac中安裝完成&#xff08;如何安裝詳見Mac OS X 下 TAR.GZ 方式安裝 MySQL&#xff09;之后&#xff0c;在登錄時會遇到沒有訪問權限的問題…

nodejs函數

https://www.cnblogs.com/yourstars/p/6121262.html

[HNOI2009]夢幻布丁

題目描述 N個布丁擺成一行,進行M次操作.每次將某個顏色的布丁全部變成另一種顏色的,然后再詢問當前一共有多少段顏色.例如顏色分別為1,2,2,1的四個布丁一共有3段顏色. 第一行給出N,M表示布丁的個數和好友的操作次數. 第二行N個數A1,A2...An表示第i個布丁的顏色從第三行起有M行,…

用jquery實現html5的placeholder功能

版權聲明&#xff1a;本文為博主原創文章。未經博主同意不得轉載。 https://blog.csdn.net/QianShouYuZhiBo/article/details/28913501 html5的placeholder功能在表單中經經常使用到。它主要用來提示用戶輸入信息&#xff0c;當用戶點擊該輸入框之后&#xff0c;提示文字會自己…

mac環境下node.js和phonegap/cordova創建ios和android應用

mac環境下node.js和phonegap/cordova創建ios和android應用 一介布衣 2015-01-12 nodejs 6888 分享到&#xff1a;QQ空間新浪微博騰訊微博人人網微信引用百度百科的一段描述:PhoneGap是一個用基于HTML&#xff0c;CSS和JavaScript的&#xff0c;創建移動跨平臺移動應用程序的…

java中多線程 - 多線程中的基本方法

介紹一下線程中基本的方法使用 線程睡眠sleep() Thread.sleep(毫秒);我們可以通過sleep方法設置讓線程睡眠。可以看到sleep是個靜態方法 public static native void sleep(long var0) throws InterruptedException; try {System.out.println(new Date().getSeconds());Thread.s…

nodejs匿名函數

https://www.cnblogs.com/sharpest/p/8056232.html

Deployment descriptor

Deployment descriptor 是指一種配置文件用于工件部署到一些container/engine。 在Java Platform&#xff0c;Enterprise Edition中&#xff0c;部署描述符描述了應如何部署組件&#xff0c;模塊或應用程序&#xff08;如Web應用程序或企業應用程序&#xff09;。它指示部署工具…

cordova 一個將web應用程序封裝成app的框架

cordova 一個將web應用程序封裝成app的框架 cordova的詳細介紹請參考這個鏈接&#xff1a;http://www.zhoujingen.cn/blog/7034.html 我接下來主要將如何搭建。 1.首先你需要下載幾樣東西 1.jdk. 2.android_SDK. 2.安裝這兩個&#xff0c;并配置環境變量 這里jdk的環境變量配置…

windows linux 子系統折騰記

最近買了部新電腦&#xff0c;海爾n4105的一體機&#xff0c;好像叫s7。 放在房間里面&#xff0c;看看資料。因為性能孱弱&#xff0c;所以不敢安裝太強大的軟件&#xff0c;然后又有一顆折騰的心。所以嘗試了win10自帶的linux子系統。然后在應用商店搜索linux推薦debian 系統…

nodejs閉包

一、什么是閉包&#xff1f; 官方”的解釋是&#xff1a;閉包是一個擁有許多變量和綁定了這些變量的環境的表達式&#xff08;通常是一個函數&#xff09;&#xff0c;因而這些變量也是該表達式的一部分。 相信很少有人能直接看懂這句話&#xff0c;因為他描述的太學術。其實這…