国产探花免费观看_亚洲丰满少妇自慰呻吟_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;} 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昂仁县| 南川市| 呈贡县| 甘肃省| 高邮市| 天峻县| 博罗县| 寻甸| 株洲县| 当雄县| 保德县| 扎鲁特旗| 玉环县| 通州市| 道真| 建昌县| 华宁县| 迁西县| 汉川市| 苏州市| 永寿县| 宝山区| 汉沽区| 兰溪市| 林甸县| 九龙坡区| 永清县| 霍州市| 台湾省| 德令哈市| 祥云县| 大余县| 晋州市| 米林县| 嘉禾县| 万盛区| 吉隆县| 井陉县| 深水埗区| 白银市| 台中县|