深度優先搜尋(二)

2021-10-13 05:42:32 字數 1710 閱讀 1402

用深度優先搜尋,直接套用模板就好。

注意mark函式和unmark函式

mark函式把格仔中的值-1,其中unmark函式,把格仔中的值+1,為什麼不是直接改變值,是因為有可能多個皇后都攻擊那乙個位置,如果直接改變值,那麼可能會影響某個皇后的攻擊範圍。

**

#include

#include

using

namespace std;

const

int max_num=

100;

int n;

int s[max_num]

[max_num]

;struct queueq[max_num]

;//將乙個皇后的攻擊範圍標記出來,皇后的座標為x,y

void

mark

(int x,

int y)

//攻擊同一列

for(

int i=

1;i<=n;i++

)//攻擊右上

int xl=x+1;

int yl=y+1;

while

(xl>=

1&&xl<=n&&yl>=

1&&yl<=n)

//攻擊右下

xl=x+1;

yl=y-1;

while

(xl>=

1&&xl<=n&&yl>=

1&&yl<=n)

//攻擊左上

xl=x-1;

yl=y+1;

while

(xl>=

1&&xl<=n&&yl>=

1&&yl<=n)

//攻擊左下

xl=x-1;

yl=y-1;

while

(xl>=

1&&xl<=n&&yl>=

1&&yl<=n)

s[x]

[y]=1;

}//撤銷皇后的攻擊範圍

void

unmark

(int x,

int y)

//攻擊同一列

for(

int i=

1;i<=n;i++

)//攻擊右上

int xl=x+1;

int yl=y+1;

while

(xl>=

1&&xl<=n&&yl>=

1&&yl<=n)

//攻擊右下

xl=x+1;

yl=y-1;

while

(xl>=

1&&xl<=n&&yl>=

1&&yl<=n)

//攻擊左上

xl=x-1;

yl=y+1;

while

(xl>=

1&&xl<=n&&yl>=

1&&yl<=n)

//攻擊左下

xl=x-1;

yl=y-1;

while

(xl>=

1&&xl<=n&&yl>=

1&&yl<=n)

s[x]

[y]=0;

}void

dfs(

int q)

return;}

else}}

return;}

intmain()

廣度優先搜尋 深度優先搜尋

前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...

廣度優先搜尋,深度優先搜尋

深度優先搜尋 depth first search 簡稱dfs。最直觀的例子就是 走迷宮 廣度優先搜尋 每個頂點都要進出一遍佇列,每個邊也都會被訪問一次,所以 時間複雜度o v e 主要消耗記憶體的是visited prev陣列 queue佇列,所以 空間複雜度o v 深度優先搜尋 每條邊最多會被訪...

深度優先搜尋 廣度優先搜尋

深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 package com.neusoft.data.structure 深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 public class dfsbfs 初始化 邊 mmatrix new int vlen vlen for...