1 条题解
-
0
unordered_map
的.count函数-用于查找是否出现过该状态,是返回1;
#include<bits/stdc++.h> #define ULL unsigned long long #define LL long long #define PII pair<int,int> using namespace std; const int N = 1e7 + 10,M = 2 * 1e3 + 10,inf = 0x3f3f3f3f; int n,m; char g[25][25]; //字符矩阵 int dir[4][2] = {{1,0},{0,1},{-1,0},{0,-1}}; //方向数组 int ans = -inf; //答案 struct node { int x,y; //该状态的坐标 unordered_map<char,int> dist; //用于查找该状态是否拿过该字符 int cnt; //记录该状态拿了多少个字符 }; void bfs() { unordered_map<char,int> stdist; //创立起始的map queue<node> q; stdist[g[0][0]] = 1; //起始字符标记 q.push({0,0,stdist,1}); while (q.size()) { auto t = q.front(); q.pop(); ans = max(ans,t.cnt); //时刻更新答案 for(int i=0;i<4;i++) { node ne; ne.x = t.x + dir[i][0]; ne.y = t.y + dir[i][1]; ne.dist = t.dist; //复制上一个状态的unordered_map ne.cnt = t.cnt + 1; //拿的字符+1 if(ne.x < 0 || ne.y < 0 || ne.x >= n || ne.y >=m) continue; //越界叉出去 if(ne.dist.count(g[ne.x][ne.y])) continue; //已经拿过了叉出去 ne.dist[g[ne.x][ne.y]] = 1; //记录拿过这个字符了 q.push(ne); } } } int main() { ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n>>m; for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin>>g[i][j]; bfs(); cout<<ans; return 0; }
- 1
信息
- ID
- 1108
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 6
- 已通过
- 3
- 上传者