PTA甲级1003

1003用的深度优先算法......最开始一直报错不知道为啥?

推荐这个:http://zjuerlemon.iteye.com/blog/2239454

还有一种方法,不过没用过https://www.cnblogs.com/nigang/p/3658990.html

#include<iostream>
#include<algorithm>
#include<map>
using namespace std;

class node {
public:
	int y, l;
	node(int i2, int i3) :y(i2), l(i3) {}
};
map<int, node> b[501];
int mt, len, nlen;

void tryd(int st, const int end,int length, int maxt, int *fi, int *a) {
	if (st == end) {
		if (length < len) {
			len = length;
			nlen = 1;
			mt = maxt;
		}
		else if (len == length) {
			++nlen;
			if (mt < maxt)
				mt = maxt;
		}

		return;
	}

	map<int, node>::iterator li;

	fi[st] = 0;
	for (li = b[st].begin(); li != b[st].end(); ++li) {
		if (fi[li->second.y]) {				
			if (length > len)
				continue;
			tryd(li->second.y, end, length + li->second.l, maxt + a[li->second.y], fi, a);					
		}
	}
	fi[st] = 1;

}


int main() {          
		mt = 0, len = (1<<31)-1, nlen = 0;//全局变量一定要在main里面赋值 
		int n, m, c1, c2;
		cin >> n >> m >> c1 >> c2;
		int *a = new int[n];
		int *fi = new int[n];
		for (int i = 0; i < n; ++i) {
			cin >> a[i];
			fi[i] = 1;
		}
		for (int i = 0; i < 501; ++i) {
			b[i].clear();
		}

		int i1, i2, i3;
		for (int i = 0; i < m; ++i) {
			cin >> i1 >> i2 >> i3;
			node d1(i2, i3), d2(i1, i3);
			b[i1].insert(make_pair(i2, d1));
			b[i2].insert(make_pair(i1, d2));
		}

		tryd(c1, c2, 0, a[c1], fi, a);
		cout <<nlen << " " << mt ;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值