题目描述
老师最近刚学完广度优先搜索(bfs),知道了广搜在一个矩阵上的探索模式是像波纹一样一层
层向周围扩散
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
第三轮搜索以后矩阵如下
表示没走过的点(vis[x][y]==0)
0001000
0011100
0111110
0011100
0001000
,用比如有如下大小的矩阵,用
vis[x][y]==1)
现在老师想知道,现在他这份没有设置范围的代码,在不考虑越界(即认为vis数组无穷大
,代码不会因为出界报错)的情况下
第n轮搜索以后vis数组求和的结果是多少?
输入格式
输入第一行是一个整数n,表示搜索的轮数
输出格式
输出一行,包含一个整数,表示答案
数据范围
对于50%的数据,保证1≤n≤20
对于80%的数据,保证1≤n≤10000
对于100%的数据,保证1≤n≤10
样例输入1
3
样例输出1
13