描述ios
給定一個矩陣,判斷移動哪個格子,能夠實現消除。(定義連續三個便可消除)編程
分析函數
先寫一個函數,判斷包含(i,j)的格子是否可能實現消除。學習
而後就是向右向下交換,而後調用上面寫好的函數判斷spa
被交換的兩個格子是否實現消除。code
重點:視頻
一、只須要向右向下交換,由於遍歷的時候,後面的交換會重複。前一個判斷了向右交換是否消除,後一個遍歷就不須要再判斷向左交換是否重複了。blog
二、必定要對被交換的兩個格子都判斷是否能消除,才能實現全面的判斷。教程
代碼:get
#include<iostream>
#include<string>
#include<vector>
#include<ctime>
#include<cstdlib> usingnamespacestd; constintLEN=8; voidpmap(intmap[][LEN])
{ for(inti=0;i<LEN;++i) { for(intj=0;j<LEN;++j) { cout<<map[i][j]<<""; } cout<<endl; } }
//檢查以(i,j)爲中心的點,看是否能夠消除
boolcheck(intmap[][LEN],inti,intj)//保證i、j不越界,
{ if( (i-1>=0&&i+1<LEN&&map[i-1][j]==map[i][j]&&map[i][j]==map[i+1][j])
||(j-1>=0&&j+1<LEN&&map[i][j-1]==map[i][j]&&map[i][j]==map[i][j+1])
||(i-2>=0&&map[i-2][j]==map[i-1][j]&&map[i-1][j]==map[i][j])
||(j-2>=0&&map[i][j-2]==map[i][j-1]&&map[i][j-1]==map[i][j])
||(i+2<LEN&&map[i+2][j]==map[i+1][j]&&map[i+1][j]==map[i][j])
||(j+2<LEN&&map[i][j+2]==map[i][j+1]&&map[i][j+1]==map[i][j]) )
{ returntrue; } returnfalse; } boolswapAndJudge(intm[][LEN],inti,intj)
//保證i、j不越界,應該對被swap的兩個點都作縱向和橫向的檢查
{ intmap[LEN][LEN]; for(intii=0;ii<LEN;++ii) { for(intjj=0;jj<LEN;++jj)
{ map[ii][jj]=m[ii][jj]; } } //原來就能夠消除 if(check(map,i,j))
{ printf("noneedtoswapat(%d,%d)\n",i,j); returntrue; } //只須要向下換和向右換 //向下換 if(i+1<LEN) { swap(map[i+1][j],map[i][j]); if(check(map,i,j)) { printf("#swapandsweap!(%d,%d)\n",i,j); returntrue; }
if(check(map,i+1,j)) { printf("#swapandsweap!(%d,%d)\n",i+1,j); returntrue; } swap(map[i+1][j],map[i][j]);//換回來 } //向右換 if(j+1<LEN) { swap(map[i][j+1],map[i][j]); if(check(map,i,j))
{ printf("#swapandsweap!(%d,%d)\n",i,j); returntrue; } if(check(map,i,j+1)) { printf("#swapandsweap!(%d,%d)\n",i,j+1); returntrue; } swap(map[i][j+1],map[i][j]);//換回來 } returnfalse; }
voidfindMinSwap(intmap[][LEN]) { for(inti=0;i<LEN;++i) { for(intj=0;j<LEN;++j) { if(swapAndJudge(map,i,j)) { printf("gotcha!(%d,%d)\n",i,j); } } } } intmain(intargc,constchar*argv[]){
//insertcodehere... //std::cout<<"Hello,World!\n"; srand(unsigned(time(0))); for(inti=0;i<LEN;++i) { for(intj=0;j<LEN;++j) { map[i][j]=rand()%5; } } cout<<"xiaoxiaole!\n"; findMinSwap(map); pmap(map); return0; }
另外若是你想更好的提高你的編程能力,學好C語言C++編程!彎道超車,快人一步!筆者這裏或許能夠幫到你~
歡迎轉行和學習編程的夥伴,利用更多的資料學習成長比本身琢磨更快哦!
編程學習: