zoukankan      html  css  js  c++  java
  • 临海天天快乐2020年暑假信奥竞赛班参考代码

    3305: Hero In Maze II

    利用广搜去直接找到最小步数,我们可以一条路走到黑,这样每个点都是最小转弯次数

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,t;
    int vis[105][105];
    char s[105][105];
    int dir[4][2]={
    	-1,0,
    	0,-1,
    	0,1,
    	1,0
    };
    struct T
    {
    	int x,y,step,turn;
    }a[10000];
    int ans;
    void bfs(int sx,int sy)
    {
    	int tot=0,cur=0;
    	a[tot++]={sx,sy,-1,4};
    	vis[sx][sy]=1;
    	while(cur<tot)
    	{
    		if(a[cur].step>t)return;
    		if(s[a[cur].x][a[cur].y]=='P')
    		{
    			ans=a[cur].step;
    			return;
    		}
    		for(int i=0;i<4;i++)
    		{
    			for(int j=1;;j++)
    			{
    				int tx=a[cur].x+dir[i][0]*j;
    				int ty=a[cur].y+dir[i][1]*j;
    				if(tx<0||ty<0||tx>=n||ty>=m)break;
    				if(vis[tx][ty]||s[tx][ty]=='*')break;
    				if(a[cur].turn!=i)a[tot++]={tx,ty,a[cur].step+1,i};
    				else a[tot++]={tx,ty,a[cur].step,i};
    				vis[tx][ty]=1;
    			}
    		}
    		cur++;
    	}
    }
    int main()
    {
    	int T;
    	cin>>T;
    	while(T--)
    	{
    		memset(vis,0,sizeof(vis));
    		cin>>n>>m>>t;
    		ans=-1;
    		for(int i=0;i<n;i++)cin>>s[i];
    		for(int i=0;i<n;i++)
    		{
    			for(int j=0;j<m;j++)
    			if(s[i][j]=='S')bfs(i,j);
    		}
    		if(ans<=t&&ans!=-1)cout<<"YES
    ";
    		else cout<<"NO
    ";
    	}
    	return 0;
    }
    
  • 相关阅读:
    C++ CheckListBox
    TreeView查获节点并选中节点
    创建文件自动重命名
    bat
    Edit显示行号
    FindStringExact
    Extended ComboBox添加图标
    C++ Combobox输入时自动完成
    C++ ComboBox基础
    C++ Code_combobox
  • 原文地址:https://www.cnblogs.com/BobHuang/p/13466708.html
Copyright © 2011-2022 走看看