题解 | #拜访#
拜访
https://www.nowcoder.com/practice/491828fc7d93459db450b344c2aaaeef
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param CityMap int整型vector<vector<>>
* @param n int整型
* @param m int整型
* @return int整型
*/
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int countPath(vector<vector<int> >& g, int n, int m) {
vector<vector<bool>> st(n+1,vector<bool>(m+1,false));
vector<vector<int>> dis(n+1,vector<int>(m+1,-1));
vector<vector<int>> dp(n+1,vector<int>(m+1,0));
queue<pair<int,int>> q;
int ex,ey;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(g[i][j]==1)
{
q.push({i,j});
dp[i][j]=1;
dis[i][j]=0;
st[i][j]=true;
}
else if(g[i][j]==2)ex=i,ey=j;
else if(g[i][j]==-1)st[i][j]=true;
}
}
while(q.size())
{
int c=q.size();
for(int i=1;i<=c;i++)
{
auto [x,y]=q.front();
q.pop();
for(int k=0;k<4;k++)
{
st[x][y]=true;
int px =x+dx[k],py=y+dy[k];
if(px>=0&&px<n&&py>=0&&py<m&&!st[px][py])
{
if(dis[px][py]==-1)//只有第一次遍历到该点的时候才会把px,py加入队列
{
q.push({px,py});
dis[px][py]=dis[x][y]+1;
dp[px][py]+=dp[x][y];
}
else {
if(dis[px][py]==dis[x][y]+1)
{
dp[px][py]+=dp[x][y];
}
}
}
}
}
}
return dp[ex][ey];
}
};
查看3道真题和解析