2018NYIST个人积分赛第四场 A - A POJ - 3026

//这个题打比赛的时候没看出来题意 后来猜出来题意 直接一发ac了 题目链接/

// 哪里有错 还要多请告知点击打开链接

这道题的就是最小生成树  然后 最难的一点就是建图 先把 a 和s 给 数字化 然后再二者的 关系  一步一步的 建图 最后来 松弛

然后完成最小生成树 

#

include

#include

#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
char mp[200][200];
char xs[100];
int dis[200][200];
int diss[200][200];
int bj[200][200];
int lk[200];
int bbj[200];
int zz[5]= {0,1,-1,0};
int rr[5]= {1,0,0,-1};
int t,m,n,sum;
struct ppx
{
    int x,y,z;
} as,ad,af,ag;
void bfs(int xx,int yy)
{
    memset(bj,0,sizeof(bj));
    as.x=xx,as.y=yy,as.z=0;
    bj[xx][yy]=1;
    queueq;
    q.push(as);
    while(!q.empty())
    {
        ad=q.front();
        q.pop();
        if(mp[ad.x][ad.y]=='A'||mp[ad.x][ad.y]=='S')
             diss[dis[xx][yy]][dis[ad.x][ad.y]]=ad.z;
        for(int i=0; i<4; i++)
        {
            af=ad;
            af.x=ad.x+zz[i];
            af.y=ad.y+rr[i];
            if(af.x>=0&&af.x=0&&af.ylk[j])
                   {
                        jj=j;
                        minn=lk[j];
                   }
              }
              bbj[jj]=1;
              sumn+=minn;
              for(int j=0;jdiss[jj][j])
                       lk[j]=diss[jj][j];
              }
        }
        printf("%lld\n",sumn);
    }
    return 0;
}


你可能感兴趣的:(算法)