队列+dfs

Queue队列就是先进先出

Enqueue():在队列的末端添加元素

Dequeue():在队列的头部读取和删除一个元素,注意,这里读取元素的同时也删除了这个元素。如果队列中不再有任何元素。就抛出异常

Peek():在队列的头读取一个元素,但是不删除

Count:返回队列中的元素个数

TrimExcess():重新设置队列的容量,因为调用Dequeue方法读取删除元素后不会重新设置队列的容量。

Contains():确定某个元素是否在队列中

CopyTo():把元素队列复制到一个已有的数组中

ToArray():返回一个包含元素的新数组

队列的更改操作

在尾部增加一个元素

Name.push(Value);
//其中Name表示要在名称为Name的队列里添加元素
//Value表示要被添加到Name里的元素的值(注:如果Value不是队列Name的类型,会报编译错误)
//无返回值

在头部删除一个元素

Name.pop();
//Name代表所要删除头部元素的队列的名称
//无返回值

访问操作

查询队列是否为空

Name.empty();
/*这个函数的返回值为bool,队列为空时为true,非空时为false
其中Name代表的是要查询的队列的名称*/

查询队列的元素个数

Name.size();
/*
这个函数的返回值为一个无符号整数,代表这个队列所包含的元素的个数
其中Name代表的是要查询的队列的名称
*/

查询队列的队首

Name.front();
/*
这个函数的返回值为一个Name的类型的值,代表这个队列的队首的值
其中Name代表的是要查询的队列的名称
*/

查询队尾的值

Name.back();
/*
这个函数的返回值为一个Name的类型的值,代表这个队列的队尾的值
其中Name代表的是要查询的队列的名称
*/

题目:青蛙跳杯子

 https://www.dotcpp.com/oj/contest5130_problem2.html

算法知识:队列+dfs

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<queue>
using namespace std;

string st,ed;
int n;
int dir[6]={-3,-2,-1,1,2,3};
map<string,int> dis;

int bfs(){
	queue<string> q;
	q.push(st);
	dis[st]=0;
	while(q.size()){
		string p=q.front();
		q.pop();
		int d=dis[p];
		int x=p.find('*');
		for(int i=0;i<6;i++){
			int z=x+dir[i];
			if(z<0||z>=n)
				continue;
			swap(p[x],p[z]);
			if(!dis.count(p)){
				dis[p]=d+1;
				if(p==ed) return dis[p];
				q.push(p);
			}
			swap(p[x],p[z]);
		}
	}
	return -1;
}  

int main(){
	cin>>st>>ed;
	n=st.size();
	cout<<bfs()<<endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值