1 条题解
-
224陈泓凯 (12134陈泓凯) LV 10 @ 2024-01-06 13:58:53
这道题时间复杂度一个个都那么高,怎么想的。题解时间复杂度不超过 O[\(nm(n+m)\)]。本代码不适合走迷宫,走迷宫时间复杂度约为 O(\(n^2m^2\))。
#include<bits/stdc++.h> using namespace std; int n,m,a[201][201],b[201][201]; int main() { cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { char c; cin>>c; a[i][j]=c-48; if(a[i][j]==0)b[i][j]=40000;//这里应该是INT_MAX else b[i][j]=0; } while(1)//这才叫暴力,这里循环次数易发现不超过 n+m { int f=1; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { int k=40000; if(i-1>=1)k=min(k,b[i-1][j]); if(i+1<=n)k=min(k,b[i+1][j]); if(j-1>=1)k=min(k,b[i][j-1]); if(j+1<=m)k=min(k,b[i][j+1]); if(k+1<b[i][j])b[i][j]=k+1,f=0; } if(f)break; } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) cout<<b[i][j]<<' '; cout<<endl; } return 0; }
- 1
信息
- ID
- 2055
- 难度
- 7
- 分类
- (无)
- 标签
- 递交数
- 18
- 已通过
- 7
- 通过率
- 39%
- 被复制
- 4
- 上传者