zoukankan      html  css  js  c++  java
  • Fire Game


    这道题说白了,其实就是最短路径问题,果断用宽搜,但是我们这里要注意的是,

    这道题是两个起点的宽搜,两个同时搜,而不是分开搜,我本人就是因为这个错误而做了很久的

    #include<iostream>
    #include<cstring>
    #include<queue>
    using namespace std;
    const int maxn=20;
    const int inf=0x3f3f3f3f;
    
    char a[maxn][maxn];
    //char b[maxn][maxn];
    int step[maxn][maxn];
    int usedtime=111111111;
    int direction[4][2]={{0,1},{1,0},{-1,0},{0,-1}};
    int column,line;
    	int ans=0;
    	int grasses; 
    	int cases=0;
    struct wo{
    	int x;
    	int y;
    };
    queue<wo>p;
    int fire(){
    	int grass=0,time=0;
    	while(p.size()){
    		struct wo help;//结构体的入队需要结构体才能入队
    		help=p.front();p.pop();
    
                     for(int i=0;i<4;i++){
    			int x1=help.x+direction[i][0],y1=help.y+direction[i][1];
    			if(x1<1||x1>line)continue;
    			if(y1<1||y1>column)continue;
    			if(a[x1][y1]=='.')continue;
    			if(step[x1][y1]<=step[help.x][help.y]+1)continue;//满足条件才入队
    		     step[x1][y1]=step[help.x][help.y]+1;
    			 wo help1;
    			 help1.x=x1;help1.y=y1;
    			 p.push(help1);
    			 grass++;//计算燃烧的草的个数
    			 time=max(step[x1][y1],time);//算时间
                      }
            } 
    if(grass==grasses-2)return time;//看燃烧完没有
    else return 111111111;
    
    }
    
    int main()
    {
     int t;
     cin>>t;
     while(t--){
     	usedtime=111111111,grasses=0;
     	cin>>line>>column;
     	for(int i=1;i<=line;i++){
    
    for(int j=1;j<=column;j++){
     			cin>>a[i][j];
     			if(a[i][j]=='#')grasses++;//计算草的个数
    		 }
    	 }
     
     for(int i=1;i<=line;i++){
     	for(int j=1;j<=column;j++){
     		if(a[i][j]=='.')continue;//只从有草的地方开始燃烧
     		for(int s=1;s<=line;s++){
     			for(int l=1;l<=column;l++){
     				if(a[s][l]=='.')continue;
     				if(l<=column){
     				 while(p.size())p.pop();
     				 if(i!=s||j!=l){
     				 //cout<<a[i][j]<<" "<<a[s][l]<<endl;
     				memset(step,inf,sizeof(step)); 
     			       wo ll;
     			        ll.x=i;ll.y=j;step[i][j]=0;
     			        p.push(ll);
     			        ll.x=s;ll.y=l;step[s][l]=0;
     			        p.push(ll);
     			        int ff=fire();
     			        usedtime=min(usedtime,ff);
    			 
    }
    			 } 
    		 }
    	 }
    }
    }
    cout<<"Case"<<" "<<++cases<<": ";
    	 if(usedtime!=111111111)
    	 cout<<usedtime<<endl; 
    	 else cout<<-1<<endl;
     }
     }
      

  • 相关阅读:
    [年报阅读] 中国银行业监督管理委员会2009年报(1)
    囧事
    [论文收集] 2009年|国内计算机方向三大学报|Web Service相关论文
    打开那扇窗
    初生牛犊不怕虎
    忘却的纪念
    Java JDBC学习
    Java数组学习
    如何清晰地思考:近一年来业余阅读的关于思维方面的知识结构整理(附大幅思维导图)
    管理类文件
  • 原文地址:https://www.cnblogs.com/c201904xyorz/p/9990803.html
Copyright © 2011-2022 走看看