「水果消除」是一款手機遊戲,相信大家都玩過或玩過類似的遊戲。
下面是「水果消除」遊戲的一種初始狀態。
消除的基本規則:如果有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 存放一...