求助一道站外题,悬关!!!!!
  • 板块灌水区
  • 楼主CNCCCNCC
  • 当前回复11
  • 已保存回复11
  • 发布时间2024/9/29 20:52
  • 上次更新2024/9/29 22:13:56
查看原帖
求助一道站外题,悬关!!!!!
1368616
CNCCCNCC楼主2024/9/29 20:52
题目描述
老师最近刚学完广度优先搜索(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
2024/9/29 20:52
加载中...