手機的九宮格圖案解鎖總共能繪出多少種圖案?(hiho類比面試題2 - google線上技術筆試類比)

來源:互聯網
上載者:User

標籤:

滑動解鎖是智能手機一項常用的功能。你需要在3x3的點陣上,從任意一個點開始,反覆移動到一個尚未經過的"相鄰"的點。這些划過的點所組成的有向折線,如果與預設的折線在圖案、方向上都一致,那麼手機將解鎖。兩個點相鄰若且唯若以這兩個點為端點的線段上不存在尚未經過的點。此外,這條折線還需要至少經過4個點。

為了描述方便,我們給這9個點從上到下、從左至右依次編號1-9。那麼1->2->3是不合法的,因為長度不足。1->3->2->4也是合不法的,因為1->3穿過了尚未經過的點2。2->4->1->3->6是合法的,因為1->3時點2已經被划過了。

無意中看到了這道題 而且在知乎回答中 各種語言啊  於是我今天上午無聊時也想做做了  哈哈

我可是沒看別人的代碼  看了正確結果~  因為感覺搜尋搜來搜去 好爽啊  就按照自己想的寫了

知乎這道題地址:https://www.zhihu.com/question/24905007

使用DFS(深搜即可)  遍曆所有可能的情況  然後篩選不可能的情況 

首先使用一個數組 把不可能出現的情況列出

filter[1][3]=filter[3][1]=2;filter[4][6]=filter[6][4]=5;filter[7][9]=filter[9][7]=8;filter[1][7]=filter[7][1]=4;filter[2][8]=filter[8][2]=5;filter[3][9]=filter[9][3]=6;filter[1][9]=filter[9][1]=5;filter[3][7]=filter[7][3]=5;

然後深搜的同時也進行篩選

void dfs(int count){if(count>=4){result++;}for(int i=1;i<=9;i++){if(count>0&&!vis[filter[stamp[count-1]][i]])continue;if(!vis[i]){vis[i]=1;stamp[count]=i;dfs(count+1);vis[i]=0;}}return ;}

全部代碼:

#include <stdio.h>#include <string.h>int filter[10][10];int stamp[9];bool vis[10];int result;void dfs(int count){if(count>=4){result++;}for(int i=1;i<=9;i++){if(count>0&&!vis[filter[stamp[count-1]][i]])continue;if(!vis[i]){vis[i]=1;stamp[count]=i;dfs(count+1);vis[i]=0;}}return ;}int main(){memset(filter,0,sizeof(filter));filter[1][3]=filter[3][1]=2;filter[4][6]=filter[6][4]=5;filter[7][9]=filter[9][7]=8;filter[1][7]=filter[7][1]=4;filter[2][8]=filter[8][2]=5;filter[3][9]=filter[9][3]=6;filter[1][9]=filter[9][1]=5;filter[3][7]=filter[7][3]=5;result=0;vis[0]=true;dfs(0);printf("%d\n",result);}

結果:


手機的九宮格圖案解鎖總共能繪出多少種圖案?(hiho類比面試題2 - google線上技術筆試類比)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.