国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

FZU 2150 Fire Game(雙端bfs搜索)

2019-11-08 19:48:10
字體:
來源:轉載
供稿:網友

題意:給你塊地,有空地,也有草堆,讓你選兩個草堆進行點火,燃燒的草堆會引燃上下左右的相鄰草堆,每一次引燃花費1s時間,問你最少花多長時間把草堆都點著,如果做不到輸出-1.

思路:每次枚舉兩塊草坪,兩端同時bfs(也就是說一開始加入兩個節點到隊列當中,和以前的類型一個道理沒什么區別),用變量count1計算草坪個數,當count1減小到0時,即找到了本次枚舉的解,并在節點node中設置一變量為c記錄當前狀態草坪個數(用于返回結果的判斷)。

AC代碼如下:

#include<cstdio>#include<queue>#include<vector> #include<cstring>#include<algorithm>using namespace std;const int maxn=10+2;struct node{	int x,y;	int c;   //當前狀態下草坪的剩余數量 	node(int x=0,int y=0,int c=0):x(x),y(y),c(c){}}; int n,m;int count1;    //草坪數量 char g[maxn][maxn];  int d[maxn][maxn];int dir[][2]={{0,1},{0,-1},{1,0},{-1,0}};bool isValid(node &nd){	return nd.x>=0&&nd.x<n && nd.y>=0&&nd.y<m;}int bfs(node &n1,node &n2){	int t=count1;            //要保證每次枚舉草坪的數量不會被改變 	memset(d,-1,sizeof(d));	queue<node>q;	n1.c=--t;	q.push(n1);	n2.c=--t;	q.push(n2);	d[n1.x][n1.y]=0;	d[n2.x][n2.y]=0;	while(!q.empty()){		node u=q.front();		q.pop();		if(!u.c){         //當草坪的數量為零時說明已經燃燒完了 		return d[u.x][u.y];}		for(int i=0;i<4;i++){			node v=node(dir[i][0]+u.x,dir[i][1]+u.y,0);			if(isValid(v) && d[v.x][v.y]==-1 && g[v.x][v.y]=='#'){			    v.c=--t;				q.push(v);				d[v.x][v.y]=d[u.x][u.y]+1;			}		}	}	return -1;}int main(){	int T;	scanf("%d",&T); 	int flag=0;	while(T--){		scanf("%d%d",&n,&m);		for(int i=0;i<n;i++)scanf("%s",g[i]);		count1=0;		vector<node>vec;		for(int i=0;i<n;i++)			for(int j=0;j<m;j++)				if(g[i][j]=='#'){					vec.push_back(node(i,j,0));					count1++;				}		if(vec.size()>2){	int min1=10000;      //當草坪數量<=2時直接輸出0,否則每次枚舉兩個草坪 		for(int i=0;i<vec.size();i++){			for(int j=i+1;j<vec.size();j++){					int temp=bfs(vec[i],vec[j]);					if(temp!=-1){						min1=min(min1,temp);					}			}		}		if(min1==10000)PRintf("Case %d: -1/n",++flag);		else printf("Case %d: %d/n",++flag,min1);  }else printf("Case %d: 0/n",++flag);	}	return 0;} 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 耿马| 阳城县| 聊城市| 上犹县| 麟游县| 伊通| 常德市| 蕲春县| 象州县| 峨边| 舒兰市| 霞浦县| 四平市| 平罗县| 邯郸县| 通化县| 昌宁县| 沙洋县| 喀喇沁旗| 寿光市| 威海市| 合作市| 凯里市| 海丰县| 视频| 来安县| 南郑县| 陕西省| 报价| 丹巴县| 合江县| 枝江市| 钟祥市| 新巴尔虎右旗| 石棉县| 济宁市| 凤山县| 浦城县| 乐山市| 福贡县| 维西|