#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct pos{
int x;
int y;
pos(int x,int y):x(x),y(y){}
};
int SumBit(int num){
int sum = 0;
while (num){
sum += num % 10;
num /= 10;
}
return sum;
}
int BFS(int x,int y,int m,int n,vector<vector<int>> &nums,vector<vector<bool>> &isVisted){
int sum = 0;
if (m==0 || n==0) return sum;
queue<pos> pq;
if (nums[x][y]>0) {
pq.emplace(x,y);
isVisted[x][y] = true;
}
while (!pq.empty()){
pos dot = pq.front();
int i = dot.x;
int j = dot.y;
pq.pop();
sum += nums[i][j];
if (i-1>=0 && !isVisted[i-1][j] && nums[i-1][j]) {
pq.emplace(i-1,j);
isVisted[i-1][j] = true;
}
if (i+1<m && !isVisted[i+1][j] && nums[i+1][j]) {
pq.emplace(i+1,j);
isVisted[i+1][j] = true;
}
if (j-1>=0 && !isVisted[i][j-1] && nums[i][j-1]) {
pq.emplace(i,j-1);
isVisted[i][j-1] = true;
}
if (j+1<n && !isVisted[i][j+1] && nums[i][j+1]) {
pq.emplace(i,j+1);
isVisted[i][j+1] = true;
}
}
return sum;
}
void DFS(int x,int y,int m,int n,int &sum,vector<vector<int>> &nums,vector<vector<bool>> &isVisted){
if (m==0 || n==0) return;
if (x<0 || x>=m || y<0 || y>=n || isVisted[x][y] || nums[x][y]==0) return;
sum += nums[x][y];
isVisted[x][y] = true;
DFS(x-1,y,m,n,sum,nums,isVisted);
DFS(x+1,y,m,n,sum,nums,isVisted);
DFS(x,y-1,m,n,sum,nums,isVisted);
DFS(x,y+1,m,n,sum,nums,isVisted);
}
int main(){
int m,n,k;
while (cin>>m>>n>>k){
vector<vector<int>> matrix(m,vector<int>(n,0));
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (SumBit(i) + SumBit(j)<=k) matrix[i][j] = 1;
}
}
vector<vector<bool>> isVisted(m,vector<bool>(n,false));
int sum = 0;
// sum = BFS(0,0,m,n,matrix,isVisted);
DFS(0,0,m,n,sum,matrix,isVisted);
cout<<sum<<endl;
}
return 0;
}
小华地图寻宝(BFS、DFS)
最新推荐文章于 2025-04-16 08:03:11 发布