zoukankan      html  css  js  c++  java
  • poj 3026 Borg Maze

    题目链接http://poj.org/problem?id=3026

    题意:从S到所有A的最小生成树

    错误点分析:题意理解;读入n,m的时候后面有很多空格;BFS+最小生成树

    分类:BFS+最小生成树

    代码

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    #include<queue>
    #define MAX 0x3f3f3f3f
    #include<iostream>
    
    using namespace std;
    int n,m;
    int len;
    int ans;
    struct
    {
        int x,y;
    }A[305];
    char s[300][300];
    int vis[300][300];
    int map[305][305];
    
    int dir[4][2]={1,0,0,1,-1,0,0,-1};
    
    struct P
    {
        int x,y,step;
    };
    
    queue <P> que;
    
    void BFS(int ii,int jj)
    {
        int i,j;
        int cur;
        for(i=1;i<=len;i++)
        {
            if(A[i].x==ii&&A[i].y==jj)
            {
                cur=i;
                break;
            }
        }
        P p;
        p.x=ii;
        p.y=jj;
        p.step=0;
        que.push(p);
    
        while(!que.empty())
        {
            P p=que.front();
            vis[ii][jj]=1;
            for(i=0;i<4;i++)
            {
                int tempx,tempy;
                tempx=p.x+dir[i][0];
                tempy=p.y+dir[i][1];
                if(tempx>=0&&tempx<n&&tempy>=0&&tempy<m&&!vis[tempx][tempy]&&s[tempx][tempy]!='#')
                {
                    P tmp;
                    tmp.x=tempx;
                    tmp.y=tempy;
                    tmp.step=p.step+1;
                    vis[tempx][tempy]=1;
                    if(isalpha(s[tempx][tempy]))
                    {
                         int curr;
                         for(j=1;j<=len;j++)
                         {
                             if(A[j].x==tempx&&A[j].y==tempy)
                             {
                                 curr=j;
                                 break;
                             }
                         }
                         map[cur][curr]=tmp.step;
                    }
                    que.push(tmp);
                }
            }
            que.pop();
        }
    }
    
    int prime()
    {
        int i,j,pos,Min;
        int vi[len+5],low[len+5];
        memset(vi,0,sizeof(vi));
        vi[1]=1;
        pos=1;
    
        for(i=1;i<=len;i++)
        {
            if(i!=pos)
            low[i]=map[pos][i];
        }
    
        for(i=1;i<len;i++)
        {
            Min=MAX;
            for(j=1;j<=len;j++)
            {
                if(!vi[j]&&Min>low[j])
                {
                    pos=j;
                    Min=low[j];
                }
            }
            ans+=Min;
            vi[pos]=1;
            for(j=1;j<=len;j++)
            {
                if(!vi[j]&&low[j]>map[pos][j])
                {
                    low[j]=map[pos][j];
                }
            }
        }
        return ans;
    }
    
    int main()
    {
        int t;
        scanf("%d",&t);
        getchar();
        while(t--)
        {
            ans=len=0;
            char ss[300];
            gets(ss);
            getchar();
            int haha = 0;
            n = m = 0;
            for(int i=0;i<strlen(ss);i++)
            {
                if(isdigit(ss[i]))
                {
                    if(!haha)
                    {
                        m = m * 10 + ss[i] - '0';
                    }
                    else
                    {
                        n = n * 10 + ss[i] - '0';
                    }
                }
                else
                    haha = 1;
            }
            int i,j;
            for(i=0;i<n;i++)
            {
                gets(s[i]);
            }
            for(i=0;i<n;i++)
            {
                for(j=0;j<m;j++)
                {
                    if(isalpha(s[i][j]))
                    {
                        ++len;
                        A[len].x=i;
                        A[len].y=j;
                    }
                }
            }
    
            for(i=1;i<=len;i++)
            {
                for(j=1;j<=len;j++)
                {
                   map[i][j]=MAX;
                }
            }
    
            for(i=0;i<n;i++)
            {
                for(j=0;j<m;j++)
                {
                    if(isalpha(s[i][j]))
                    {
                         memset(vis,0,sizeof(vis));
                         BFS(i,j);
                    }
                }
            }
            printf("%d
    ",prime());
        }
        return 0;
    }
    anytime you feel the pain.hey,refrain.don't carry the world upon your shoulders
  • 相关阅读:
    同源策略和跨域知识点学习
    一次脚本注入广告漏洞分析
    一个利用微信分享的项目开发过程以及后续思考
    react-native —— 在Windows下搭建React Native Android开发环境
    ionic —— 开发环境搭建并编译运行第一个APP
    错误: 找不到或无法加载主类
    jekyll and github.io搭建博客遇到的问题
    java 10 生成头文件
    JNI的使用
    vivado error:incorrect freePtr. Call out of sequence?
  • 原文地址:https://www.cnblogs.com/gaoss/p/4915906.html
Copyright © 2011-2022 走看看