zoukankan      html  css  js  c++  java
  • 1145. Rope in the Labyrinth 夜

    http://acm.timus.ru/problem.aspx?space=1&num=1145

    两次bfs 找树的直径  还有在函数里面不能定义太大的数组 否则执行不了

    代码:

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    #include<vector>
    #include<set>
    #include<map>
    #include<string>
    #include<queue>
    #include<stack>
    #include <iomanip>
    using namespace std;
    #define LL long long
    const int INF=0x3f3f3f3f;
    const int N=1005;
    int X[]={1,-1,0,0};
    int Y[]={0,0,1,-1};
    char s[N][N];
    int dist[N][N];
    int ans;
    int n,m;
    int stx,sty;
    void bfs()
    {
        memset(dist,-1,sizeof(dist));
        queue<int>qtx;
        queue<int>qty;
        qtx.push(stx);
        qty.push(sty);
        dist[stx][sty]=0;
        while(!qtx.empty())
        {
            int x=qtx.front();qtx.pop();
            int y=qty.front();qty.pop();
            for(int i=0;i<4;++i)
            {
                int l1=x+X[i];
                int l2=y+Y[i];
                if(x>=0&&x<n&&y>=0&&y<m&&s[l1][l2]=='.'&&dist[l1][l2]==-1)
                {
                    dist[l1][l2]=dist[x][y]+1;
                    if(dist[l1][l2]>ans)
                    {
                        ans=dist[l1][l2];
                        stx=l1;
                        sty=l2;
                    }
                    qtx.push(l1);
                    qty.push(l2);
                }
            }
        }
    }
    int main()
    {
        //freopen("data.in","r",stdin);
        cin>>m>>n;
        getchar();
        for(int i=0;i<n;++i)
        gets(s[i]);
        stx=-1;
        sty=-1;
        int I=0;
        for(int i=0;i<n;++i)
        for(int j=0;j<m;++j)
        if(s[i][j]=='.')
        {
            ++I;
            if(stx==-1)
            {stx=i;sty=j;}
        }
        if(I<=1)
        {
            cout<<"0"<<endl;return 0;
        }
        ans=0;//cout<<stx<<" "<<sty<<endl;
        bfs();
        bfs();
        cout<<ans<<endl;
    }
    
  • 相关阅读:
    oracle的over函数应用(转载)
    Oracle decode()函数应用
    EL表达式显示数据取整问题
    null值与空值比较
    case when语句的应用
    堆排序
    希尔排序
    插入排序
    异或运算
    选择排序
  • 原文地址:https://www.cnblogs.com/liulangye/p/2780295.html
Copyright © 2011-2022 走看看