C++ 模板

#include<iostream>
#include <unordered_map>
#include <map>
#include <set>
using namespace std;
int step = 99999;


//vector 容器以类模板 vector<T>( T 表示存储元素的类型)的形式定义在 <vector> 头文件中,并位于 std 命名空间中。
//因此,在创建该容器之前,代码中需包含如下内容:
//#include <vector>
//using namespace std;




//      当前体力值n, 当前所在岛屿i, 存放已走过的结点的Set:visit, 岛屿总数m, 矩阵b[100][100], 初始体力值p
void dfs(int n, int s, int i, set<int> visit, int m, int b[][100], int p) {
	if (i == m - 1) {
		if (s < step) {
			step = s;
		}
		return;
	}

	for (int j = 0; j < m; j++) {
		if ( visit.find(j) != visit.end()) {
			continue;
		}
		if (b[i][j] != -1) {
			if (n >= b[i][j]) {
				visit.insert(j);
				dfs(n - b[i][j], s + b[i][j], j, visit, m, b, p);
				visit.erase(j);
			}
			else {
				s++;
				n = p;
				visit.insert(j);
				dfs(n - b[i][j], s + b[i][j], j, visit, m, b, p);
				s--;
				visit.erase(j);
			}
		}
	}



}

int main() {

	//加不加std::都可以,貌似一些老的c++编译器必须加
	std::map<string, int> map;
	//插入: map["xiaoMing"] = 3;   用这种方式可以覆盖之前存在的值(如果之前存在的话)
	//查找: if(map.find("xiaoMing") != map.end() ) 如果查找不到,返回的就是map.end(),end()是最后一个元素的后一个位置
	//删除: int returnVal = map.erase("xiaoMing")  如果删除成功,返回值returnVal就为1,失败返回0

	//vector初始化,如果不指定容量,则动态扩展容量
	vector<char>value;
	//快速赋值
	 std::vector<double> ch(20, 1.0);
	//尾插
	value.push_back('S');
	//尾删
	value.pop_back();
	//头插
	value.insert(value.begin(), 'C');
	//遍历
	for (int i = 0; i < value.size(); i++) {
		cout << value.at(i);
		//或者 
		cout << value[i];
	}
	cout << "首个元素为:" << value.at(0) << endl;




	int n = -1;
	int m = -1;
	cin >> n;
	cin >> m;

	int a[100][100];
	std::set<int> visit;
	for (int i = 0; i < m; i++) {
		for (int j = 0; j < m; j++) {
			cin >> a[i][j];
		}
	}
	int flag = 0;
	for (int i = 0; i < m - 1; i++) {
		if (a[i][m - 1] != -1) {
			flag = 1;
			break;
		}
	}
	if (flag == 0) {
		cout << "-1";
		return 0;
	}


	visit.insert(0);
	dfs(n, 0, 0, visit, m, a, n);
	cout << step;
	return 0;


}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雄狮少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值