1.數字的全排列
#include #include #include using namespace std;
int a[10];//這個陣列中乙個乙個放排的
int flag[10];//這個陣列標記數字是否放入
int n;
void dfs(int step)
備註:乙個陣列進行標記,另乙個陣列進行放置的排列,一次排好以後輸出排列結果;倒退回最近的一步進行選擇再次進行排列。
2.二維陣列尋找最少步數(走出迷宮最短步數)
(下標從1開始)
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
這樣的乙個5*4的矩陣,1代表路障,0可以走,從(1,1)出發,到(4,3)的位置
#include #include #include using namespace std;
int map[6][5];
int mins=999999;
bool flag[6][5]=;
void dfs(int r,int c,int step),,,};
if(r==4&&c==3)
} return;
}int main()
cout備註:與第一題不同在於 1,變成二維陣列,需要開設兩個二維陣列,乙個進行標記,另乙個進行排列;2,有步數的加入,每一次遞迴都加一次步數,到達終點時將步數與之前步數進行比較,輸出最小步數;3,分方向,迴圈的條件變為現在所在位置的四個方向的選擇。
3.求島嶼的面積
在一張二維地圖中,數字代表海拔,0代表大海,求某乙個點(比如6,8)所在島嶼的面積
#include #include #include using namespace std;
int sum;
int x,y;
int map[11][11]=;
bool flag[11][11]=;
void dfs(int r,int c),,,};
int tr=0,tc=0;
for(int i=0;i<4;i++)
} return;
}int main();
bool flag[11][11]=;
void dfs(int r,int c,int n),,,};
int tr=0,tc=0;
map[r][c]=n;
for(int i=0;i<4;i++)
} return;
}int main()
} }cout<
}
備註: 從左上角開始遍歷尋找,找到乙個島將它置於num--(並深度搜尋與該島嶼相連的所有島都置於該num--),相當於劃分板塊,-1,-2,-3...板塊,最後乙個板塊的負即為島嶼的個數了。
5.方格填數
如下的10個格仔
填入0~9的數字。要求:連續的兩個數字不能相鄰。
(左右、上下、對角都算相鄰)
一共有多少種可能的填數方案?
//第一排檢查左右,第一列檢查上和右上,第三列檢查上,上左,左,其餘檢查左,上左,上,上右;
void dfs(int r,int c)
for(int i=0;i<10;i++)
}} int main()
dfs(0,1);
cout<6.寒假作業
每個方塊代表1~13中的某乙個數字,但不能重複。
比如:6 + 7 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
以及:
7 + 6 = 13
9 - 8 = 1
3 * 4 = 12
10 / 2 = 5
就算兩種解法。(加法,乘法交換律後算不同的方案)
// for(int i=0;i這兩個部落格寫的很好,我看得第乙個文章介紹,做的第二個題目。
演算法入門
深度優先的八個簡單小栗子
1.在乙個n*m(n行, m列)的迷宮中,存在著乙個入口、一些牆壁以及乙個寶藏。由於迷宮是四連通的,即在迷宮中的乙個位置,只能走到與它直接相鄰的其他四個位置(上、下、左、右)。現洪尼瑪在迷宮的入口處,問他最少需要走幾步才能拿到寶藏?若永遠無法拿到寶藏,則輸出-1。
輸入樣例1:
3 3s.#
.#e輸出 -1
輸入樣例2:
5 5s.#..
#...e
輸出 7
#include #include #include #include #define max 101
using namespace std;
char map[max][max];
bool vis[max][max]=;//標記是否已經訪問
struct point
};int next[4][2]=;
int flag,val,num=0;
int n,m;
queueq;//用賭佇列進行維護
void bfs(int sr,int sc)
for(int i=0;i<4;i++)
} }}int main()
for(int i=0;i
} }
bfs(r1,c1);
if(flag==0) cout<
else cout<
return 0;
}
深度搜尋和廣度搜尋
這篇部落格很早之前就寫好了,但是一直沒有發出來。在進行詳細解說之前,我們需要先借用圖的概念,圖就是由一些小圓點 稱為頂點 和連線這些小圓點的直線 稱為邊 組成的。如下圖是由5個頂點 1,2,3,4,5 和5 條邊 1 2,1 2,1 4,2 5,3 4 組成的。現在我們從一號頂點開始遍歷這個圖,使用...
廣度搜尋和深度搜尋
我現在要從 雙子峰 前往 金門大橋 求最短的路徑 帶單獨參構造方法 public placetree string p 帶全參的構造方法 public placetree placetree left,placetree right,string p public static void main ...
廣度搜尋和深度搜尋的分析
廣度優先搜尋和深度優先搜尋各有他的優點,也有他們的不足之處。廣度優先搜尋在遍歷的時候不需要全部遍歷,搜尋到符合條件的就立即終止,這樣就不會浪費太多時間。但是在遍歷的過程中,他需要建立乙個佇列來儲存遍歷的狀態 也就是遍歷到的每乙個結點需要先存入到佇列中,然後取出 這樣就無非就增加了空間複雜度。而深度優...