CCF201604-4 游戏

#include <iostream>
#include <bits/stdc++.h> 
using namespace std;
struct Node//当前位置和时间 
{
	int r,c,t;
	Node(int rr,int cc,int tt):r(rr),c(cc),t(tt){
	}
};
int visited[105][105][305]={0};//标记一个点人(r,c)在t时刻是否可以访问
int n,m,t;
int dis[4][2]={{-1,0},{1,0},{0,-1},{0,1}};//上下左右 
int main(int argc, char** argv) 
{
	cin>>n>>m>>t;
	while(t--)
	{
		int r,c,a,b;
		cin>>r>>c>>a>>b;
		for(int i=a;i<=b;i++)
		{
			visited[r][c][i]=1;//1:不可以被访问 
		}
	}
	queue<Node> q;//BFS
	q.push(Node(1,1,0));//把第一个点加入
	visited[1][1][0]=1;//标记
	while(!q.empty())
	{
	     Node v=q.front();
		 q.pop();
		 if(v.r==n&&v.c==m)//边界条件 
		 {
		      cout<<v.t;
		      return 0;
		 }
		 
		 //往四个方向走
		 for(int i=0;i<4;i++)
		 {
		     int tr=v.r+dis[i][0];
			 int tc=v.c+dis[i][1];
			 int time=v.t+1;
			 //不可越界访问 
			 if(tr>0&&tr<=n&&tc>0&&tc<=m&&!visited[tr][tc][time])
			 {
			     	q.push(Node{tr,tc,time});
					 visited[tr][tc][time]=1; 
			 }	
		 }	
	} 
	
	
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值