hnust 水果消除 回溯法 深搜

2021-08-01 20:09:50 字數 1447 閱讀 8853

「水果消除」是一款手機遊戲,相信大家都玩過或玩過類似的遊戲。

下面是「水果消除」遊戲的一種初始狀態。

消除的基本規則:如果有2個或2個以上的相同水果連在一起,則可以點選並消除。

請問在某一種狀態下,有幾種可以點選並消除的選擇方案。

例如,對於上圖所示的初始狀態,將有6種點選並消除的選擇方案。這6種方案依次如下圖所示。

輸入

先輸入乙個整數n,表示放水果的格仔總數為n*n。n取3到1000之間的整數(含3和1000)。

然後依次輸入n*n個表示水果的資料,不同的水果用不同的數字表示,同一種水果用相同的數字表示。

表示水果的數字編號從1開始,不超過100。

輸出

在輸入資料對應的初始狀態下,有幾種點選並消除的選擇方案。

輸出方案數。

樣例輸入

6 1 1 2 2 2 2

1 3 2 1 1 2

2 2 2 2 2 3

3 2 3 3 1 1

2 2 2 2 3 1

2 3 2 3 2 2

樣例輸出

6

#include

using

namespace

std;

#define n 1005

int a[n][n]=;

int n,ans=0;

void findpath(int x,int y,int a[n][n])

//right

else

if(x+1

1][y]==fruit)//down

else

if(y-1>=0&&a[x][y-1]==fruit)//left

else

if(x-1>=0&&a[x-1][y]==fruit)//up

if(ok==1)

else

else}}

if(is_sur>=1)//判斷是否可以消除

}int main()

for(i=0;ifor(j=0;jif(a[i][j]!=-1 &&a[i][j]!=0)

findpath(i,j,a);//若該點存在則開始搜尋路徑

}printf("%d\n",ans);

}

Leetcode 回溯法 深搜 單詞搜尋(79)

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

dfs深搜演算法及回溯法以及回溯法的型別題

dfs是對乙個連通圖進行遍歷的演算法。它的思想是從乙個頂點v0開始,沿著一條路一直走到底,如果發現不能到達目標解,那就返回到上乙個節點,然後從另一條路開始走到底,這種盡量往深處走的概念即是深度優先的概念。回溯法 問題的每個解都包含n部分,先給出第一部分,再給出第二部分,直到給出第n部分,這樣就得到了...

oj 深搜 回溯(3)

求幾個數的全排列 include include using namespace std intmap 100 假設排列數的個數最多為100 int n 實際個數 int q 多少種不同的數 int icount 100 存放每種不同的數的個數。陣列大小由q決定 int itable 100 存放一...