1 条题解

  • 2

    这道题时间复杂度一个个都那么高,怎么想的。题解时间复杂度不超过 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
难度
8
分类
(无)
标签
递交数
15
已通过
6
通过率
40%
被复制
4
上传者