标签:dfs
1.题目描述:点击打开链接
2.解题思路:本题利用DFS解决。对每一个格子都进行dfs,当cur==6时,将合成的整数放入set中,最后输出set的大小即可。
3.代码:
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<algorithm> #include<string> #include<sstream> #include<set> #include<vector> #include<stack> #include<map> #include<queue> #include<deque> #include<cstdlib> #include<cstdio> #include<cstring> #include<cmath> #include<ctime> #include<functional> using namespace std; #define N 6 int g[N][N]; int A[N]; int dx[] = { -1, 1, 0, 0 }; int dy[] = { 0, 0, -1, 1 }; set<int>base; bool inside(int x, int y){ return (x >= 0 && y >= 0 && x < 5 && y < 5); } void dfs(int x, int y, int cur) { if (cur == 6) { int sum = 0; for (int i = 0; i < cur; i++) sum = sum * 10 + A[i]; base.insert(sum); } else { A[cur] = g[x][y]; for (int i = 0; i < 4; i++) { int nx = x + dx[i], ny = y + dy[i]; if (inside(nx, ny)) dfs(nx, ny, cur + 1); } } } int main() { //freopen("t.txt", "r", stdin); string str; while (getline(cin,str)) { base.clear(); memset(A, 0, sizeof(A)); stringstream ss(str); int x, i = 0; while (ss >> x)g[0][i++] = x; for (int i = 1; i < 5; i++) { getline(cin, str); int j = 0; stringstream ss(str); while (ss >> x)g[i][j++] = x; } for (int i = 0; i < 5;i++) for (int j = 0; j < 5; j++) dfs(i, j, 0); cout << base.size() << endl; } return 0; }
标签:dfs
原文地址:http://blog.csdn.net/u014800748/article/details/44941741