zoukankan      html  css  js  c++  java
  • CF590C Three States

    CF590C Three States

    题意翻译

    给你一个?×?的地图,’.’为荒地,’#’为石头,数字为国家,求最少将多少个荒地修为路可以将三个国家联通。无解输出‘-1’。


    题解:

    0/1BFS

    注意坑点是枚举到荒地的时候,要-2.

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int INF=0x3f3f3f3f;
    struct node
    {
    	int x,y;
    };
    int dx[5]={0,0,1,-1};
    int dy[5]={1,-1,0,0};
    char ch[1010][1010];
    int dis[1010][1010][5];
    bool vis[1010][1010]; 
    int n,m;
    long long minn=0x3f3f3f3f3f3f3f3f;
    void bfs(int s)
    {
    	deque<node> q;
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=m;j++)
    			if(ch[i][j]-'0'==s)
    			{
    				dis[i][j][s]=0;
    				q.push_back((node){i,j});
    			}
    	while(q.size())
    	{
    		node u=q.front();
    		q.pop_front();
    		int x=u.x;
    		int y=u.y;
    		for(int i=0;i<4;i++)
    		{
    			int xx=x+dx[i];
    			int yy=y+dy[i];
    			if(xx<1||xx>n||dis[x][y][s]+1>=dis[xx][yy][s]||yy<1||yy>m||ch[xx][yy]=='#')
    				continue;
    			if(ch[xx][yy]=='.')//标准01BFS
    			{
    				dis[xx][yy][s]=dis[x][y][s]+1;
    				q.push_back((node){xx,yy});
    			}
    			else 
    			{
    				dis[xx][yy][s]=dis[x][y][s];
    				q.push_front((node){xx,yy});
    		    }
    		}
    	}
    }
    int main()
    {
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=m;j++)
    			cin>>ch[i][j];
    	memset(dis,INF,sizeof(dis));
    	bfs(1);
    	bfs(2);
    	bfs(3);
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=m;j++)
    		{
    			long long cost=1ll*dis[i][j][1]+dis[i][j][2]+dis[i][j][3];
    			if(ch[i][j]=='.')
    				cost-=2;	
    			minn=min(minn,cost);
    		}
    	if(minn>=INF)
    		cout<<"-1";
    	else 
    		cout<<minn;
    	return 0;
    } 
    
  • 相关阅读:
    1.12学习总结:分区
    1.11学习总结:持久化
    1.10学习总结:RDD的行动操作
    1.9学习总结:RDD的转换操作
    1.8学习总结:RDD创建
    1.7学习总结:pyspark实例WordCount
    1.6学习总结:Spark集群的高可用配置
    1.5学习总结:安装Spark
    毕业设计第四周第七天完成情况汇总
    毕业设计第四周第五天完成情况汇总
  • 原文地址:https://www.cnblogs.com/fusiwei/p/14029135.html
Copyright © 2011-2022 走看看