广搜于与vector的结合

代码如下:

#include<bits/stdc++.h>
using namespace std;
struct node{
	int x,y,step;//经过的位置坐标  步数
}q;
int mapp[55][55],vis[55][55];
//定义结构体数组模拟队列
vector<node>que;
//方向数组
int nt[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
//m行列 n步数
int m,n;
//cnt记数
int cnt;
void bfs(int sx,int sy){
	//起点值入队
	q.x=sx;
	q.y=sy;
	q.step=0;
	//队尾入队
	que.push_back(q);
	//标记为1
	vis[sx][sy]=1;//标记此点已经被走过
	//开始搜索
	while(!que.empty()){
		//循环搜索周围四个点
		for(int i=0;i<4;i++){
			//获取新元素
			vector<node>::iterator start=que.begin();
			//获取尾元素
			vector<node>::iterator endd=que.end()-1;
			//四个搜索方向坐标编号
			int tx=(*start).x+nt[i][0];
			int ty=(*start).y+nt[i][1];
			//判断此点是否可以走
			if(tx>=1&&tx<=m&&ty>=1&&ty<=m&&mapp[tx][ty]==1&&vis[tx][ty]==0&&(*endd).step<n){
				vis[tx][ty]=1;//标记此点已经被搜索过
				//当前点入队
				q.x=tx;
				q.y=ty;
				q.step=(*start).step+1;//步数+1
				que.push_back(q);//入队
				cnt++;
			}
		}
		que.erase(que.begin());//删除首元素 队首出队
	}
}
int main(){
	int sx,sy;//开始位置
	cin>>m>>n;
	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++){
			cin>>mapp[i][j];
		}
	}
	cin>>sx>>sy;
	bfs(sx,sy);
	cout<<cnt;
	return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`vector` 是 C++ STL 中的一个动态数组容器,可以方便地处理可变长度的数据。结合`template`,我们可以定义一个通用的`vector`类,使其可以存储任何类型的数据。 以下是一个使用`template`实现的`vector`类的示例: ```c++ template<typename T> class Vector { public: Vector() : m_size(0), m_capacity(4), m_data(nullptr) { m_data = new T[m_capacity]; } ~Vector() { delete[] m_data; } void push_back(const T& value) { if (m_size == m_capacity) { resize(m_capacity * 2); } m_data[m_size++] = value; } T& operator[](int index) { return m_data[index]; } int size() const { return m_size; } private: void resize(int new_capacity) { T* new_data = new T[new_capacity]; for (int i = 0; i < m_size; i++) { new_data[i] = m_data[i]; } delete[] m_data; m_data = new_data; m_capacity = new_capacity; } private: int m_size; int m_capacity; T* m_data; }; ``` 这个类定义了一个通用的动态数组容器,可以存储任何类型的数据。其中,`T` 是模板参数,表示要存储的数据类型。在类中,我们可以使用`T`定义数据类型、变量、参数等。 这个类实现了一些常用的操作,例如`push_back`用于添加元素、`operator[]`用于访问元素、`size`用于查询容器大小等。在实现中,我们可以使用`T`定义变量、参数等。 使用这个类非常简单,只需要在定义时指定要存储的数据类型即可: ```c++ Vector<int> v; v.push_back(1); v.push_back(2); int a = v[0]; int b = v[1]; ``` 这样就可以使用通用的`Vector`类存储任意类型的数据了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值