#2067. 徐老师的广度优先搜索
徐老师的广度优先搜索
题目描述
徐老师最近刚学完广度优先搜索,知道了广搜在一个矩阵上的探索模式是像波纹一样一层层向周围扩散
void bfs(int sx, int sy){
queue<Node> q;
q.push(Node{sx, sy});
while (!q.empty()){
Node now = q.front();
q.pop();
for (int i = 0; i < 4; ++i){
int tx = now.x + dirx[i];
int ty = now.y + diry[i];
if (vis[tx][ty] == 0){
q.push(Node{tx, ty});
vis[tx][ty] = 1;
}
}
}
}
但是显然徐老师的这段代码有一个致命错误——没有判断边界,也就是会无限向外拓展
比如有如下大小的矩阵,用 0
表示没走过的点(),用 1
表示走过的点()
第一轮搜索以后矩阵如下
0000000
0000000
0001000
0000000
0000000
第二轮搜索以后矩阵如下
0000000
0001000
0011100
0001000
0000000
第三轮搜索以后矩阵如下
0001000
0011100
0111110
0011100
0001000
现在徐老师想知道,现在他这份没有设置范围的代码,在不考虑越界(即认为 数组无穷大,代码不会因为出界报错)的情况下
第 轮搜索以后 数组求和的结果是多少?
输入格式
输入第一行是一个整数 ,表示搜索的轮数
输出格式
输出一行,包含一个整数,表示答案
数据范围
对于 的数据,保证
对于 的数据,保证
对于 的数据,保证
样例输入1
3
样例输出1
13
样例输入2
1000000000
样例输出2
1999999998000000001
相关
在下列比赛中: