深度優先搜尋 單詞方陣

2021-07-26 20:20:37 字數 1136 閱讀 6094

洛谷 p1101 單詞方陣

題目描述

給一nxn的字母方陣,內可能蘊含多個「yizhong」單詞。單詞在方陣中是沿著同一方向連續擺放的。擺放可沿著8個方向的任一方向,同一單詞擺放時不再改變方向,單詞與單詞之間可以交叉,因此有可能共用字母。輸出時,將不是單詞的字母用「*」代替,以突出顯示單詞。

分析

逐個點逐個方向搜尋,沒什麼難的,重點在於往某方向搜尋時不能臨時改變方向,即迴圈要在外面

#include 

#include

using

namespace

std;

char a[101][101],c[8]="yizhong";

bool b[101][101],p;

int n,i,j,k,s;

void dfs(int x,int y,int w)

s++;

if (w==1&x+1

<=n&a[x+1][y]==c[s]) dfs(x+1,y,w);

if (w==2&x-1>=1&a[x-1][y]==c[s]) dfs(x-1,y,w);

if (w==3&y+1

<=n&a[x][y+1]==c[s]) dfs(x,y+1,w);

if (w==4&y-1>=1&a[x][y-1]==c[s]) dfs(x,y-1,w);

if (w==5&x+1

<=n&y+1

<=n&a[x+1][y+1]==c[s]) dfs(x+1,y+1,w);

if (w==6&x+1

<=n&y-1>=1&a[x+1][y-1]==c[s]) dfs(x+1,y-1,w);

if (w==7&x-1>=1&y+1

<=n&a[x-1][y+1]==c[s]) dfs(x-1,y+1,w);

if (w==8&x-1>=1&y-1>=1&a[x-1][y-1]==c[s]) dfs(x-1,y-1,w);

if (p) b[x][y]=true;

s--;

}int main()

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

return(0);

}

深度優先遍歷 回溯 79 單詞搜尋

題目描述 給定乙個二維網格和乙個單詞,找出該單詞是否存在於網格中。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母不允許被重複使用。示例 board a b c e s f c s a d e e 給定 word abcce...

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

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

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

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