zoukankan      html  css  js  c++  java
  • 洛谷P1135 奇怪的电梯BFS&DFS

    题目链接:
    https://www.luogu.org/problem/P1135

    参考代码:

    DFS:

    #include<bits/stdc++.h>
    using namespace std;
    int n,a,b,arr[201],ans=100000;
    bool cf[201];
    void dfs(int now,int sum)//now现在的楼层,sum按按钮的次数
    {
    	if(now==b)
    		ans=min(ans,sum);
    	else if(sum<=ans)
    	{
    		cf[now]=true;
    		if(now+arr[now]<n&&!cf[now+arr[now]])//未越界并且没有去过下一个楼层
    			dfs(now+arr[now],sum+1);//向上走
    		if(now-arr[now]>=1&&!cf[now-arr[now]])
    			dfs(now-arr[now],sum+1);//向下走
    		arr[now]=false;
    	}
    }
    int main() 
    {
    	cin>>n>>a>>b;
    	for(int i=1;i<=n;i++)
    		cin>>arr[i];
    	cf[a]=true;
    	dfs(a,0);
    	if(ans!=100000)
    		cout<<ans;
    	else
    		cout<<-1;
    	return 0;
    }
    

    BFS:

    #include<queue>
    #include<bits/stdc++.h>
    using namespace std;
    struct QElement
    {
    	int floor;//当前楼层编号
    	int pushcount;//计数
    };
    queue<QElement> q;//定义元素为qelement的队列q
    int n,a,b;
    int s[1000];//数组s记录每个楼层按按钮后能上下的楼层数
    int t[1000]={0};//记录是否访问过,重复
    int main() 
    {
    	QElement e1,e2;
    	int i;
    	cin>>n>>a>>b;
    	for(int i=1;i<=n;i++)
    		cin>>s[i];
    	e1.floor=a;
    	e1.pushcount=0;
    	q.push(e1);//初始状态人队
    	t[a]=1;
    	while(!q.empty())//队列不是空,继续宽度优先搜索
    	{
    		e2=q.front();//获取队首元素
    		q.pop();//队头元素出队(注意:c++的队列模板类中,获取队头元素并不会将该元素从队列中删除,需要使用pop函数删除该元素)
    		if(e2.floor==b)
    			break;
    		i=e2.floor+s[e2.floor];//按向上按钮后能够到达的楼层
    		if(i<=n&&t[i]==0)
    		{
    			e1.floor=i;
    			e1.pushcount=e2.pushcount+1;
    			q.push(e1);
    			t[i]=1;//标记
    		}
    		i=e2.floor-s[e2.floor];
    		if(i>=1&&t[i]==0)
    		{
    			e1.floor=i;
    			e1.pushcount=e2.pushcount+1;
    			q.push(e1);
    			t[i]=1;
    		}
    
    	}
    	if(e2.floor==b)
    		cout<<e2.pushcount;
    	else 
    		cout<<-1;
    	return 0;
    }
    
    
  • 相关阅读:
    RN8209校正软件开发心得(1)
    Chrome 31版本导出Excel问题
    ComBox选择
    网页设计的一般步骤
    .NET一套开发工具
    关于用sql语句实现一串数字位数不足在左侧补0的技巧
    python jieba模块详解
    python内置函数详细描述与实例演示
    Markdown的基本语法记录
    python configparser模块详解
  • 原文地址:https://www.cnblogs.com/yonglin1998/p/11780809.html
Copyright © 2011-2022 走看看