hihocoder#1054 : 滑动解锁
2015-05-10 20:48
330 查看
#include <iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<vector> #include<set> using namespace std; int T,m,a[10],ans; vector<int> mg[10]; int g[10][10]; bool used[10]; void init() { memset(g,0,sizeof(g)); g[1][3]=g[3][1]=2;g[1][7]=g[7][1]=4; g[1][9]=g[9][1]=5;g[2][8]=g[8][2]=5; g[3][7]=g[7][3]=5;g[4][6]=g[6][4]=5; g[7][9]=g[9][7]=8;g[3][9]=g[9][3]=6; } void dfs(int s,int matching,int step) { used[s]=true; if(matching>=m &&step>=4) ans++; int sz=mg[s].size(); if(sz==1 && !used[mg[s][0]]) { int u=mg[s][0]; int v=g[s][u]; if(v && used[v] ||v==0) dfs(mg[s][0],matching+1,step+1); } else if(sz==2 && ( (used[mg[s][0]]&&!used[mg[s][1]]) || (!used[mg[s][0]]&&used[mg[s][1]]) ) ) { if(!used[mg[s][0]]) { int u=mg[s][0]; int v=g[s][u]; if(v&&used[v] ||v==0) dfs(mg[s][0],matching+1,step+1); } else { int u=mg[s][1]; int v=g[s][u]; if(v&&used[v] ||v==0) dfs(mg[s][1],matching+1,step+1); } } else if(sz==0 ||sz==1) { for(int i=1;i<10;i++) { if(i==s) continue; int u=g[s][i]; if(u && used[u] &&!used[i]) { dfs(i,matching,step+1); } else if(u==0 && !used[i]) { dfs(i,matching,step+1); } } } used[s]=false; } int main() { scanf("%d",&T); init(); while(T--) { scanf("%d",&m); int u,v; for(int i=0;i<10;i++) mg[i].clear(); for(int i=0;i<m;i++) { scanf("%d%d",&u,&v); mg[u].push_back(v); mg[v].push_back(u); } memset(used,0,sizeof(used)); ans=0; for(int i=1;i<10;i++) { dfs(i,0,1); } printf("%d\n",ans); } return 0; }
此题为谷歌公司出的一道面试题,解题思路也不复杂,最主要的难点在于相连经过的点必须为之前走过的点。
不过此题个人认为谷歌公司出题并不严谨,,如果看到的折线为1-9,那么此题似乎就要相对复杂了,但是显然google没有出此类数据,因为当我删除为此(虽然不一定对)做
特殊处理的那一段代码时,还是AC了。
相关文章推荐
- hihoCoder#1054 滑动解锁
- hihocoder 1054 滑动解锁 dfs
- Hihocoder 1054滑动解锁 谷歌笔试题
- hihoCoder 1054 : 滑动解锁(dfs)
- hihoCoder 1054 : 滑动解锁
- hihoCoder--1054 : 滑动解锁
- 滑动解锁 HihoCoder - 1054
- hiho_1054_滑动解锁
- 【八中测试】滑动解锁(HihoCoder - 1054)
- hihoCoder #1054 滑动解锁
- Hihocoder 1054 滑动解锁 暴力dfs
- hiho#1054 : 滑动解锁 (hiho模拟面试题2 - google在线技术笔试模拟)
- #1054 : 滑动解锁
- hihoCoder 1054:滑动解锁(DFS)
- hihocoder#1054之滑动解锁
- 1054 : 滑动解锁 hihocoder & 蓝桥2017模拟
- 使用Android自定义控件实现滑动解锁九宫格
- android仿三星I900滑动解锁
- 自定义锁屏demo之滑动解锁
- 利用ViewDragHelper实现向左滑动解锁