当前位置: 首页>>代码示例>>C++>>正文


C++ state::hash方法代码示例

本文整理汇总了C++中state::hash方法的典型用法代码示例。如果您正苦于以下问题:C++ state::hash方法的具体用法?C++ state::hash怎么用?C++ state::hash使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在state的用法示例。


在下文中一共展示了state::hash方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: dfs

double dfs(state &u) {
	if (u.c.size() == 1)	return 0;
	sort(u.c.begin() + 1, u.c.end());
	int h = u.hash();
	if (hash[h].find(u) != hash[h].end())
		return hash[h][u];
	double &ret = hash[h][u];
	double self = 0, total = 0;
	ret = 0;
	for (int i = 0; i < u.c.size(); i++)
		total += u.c[i];
	total = total - 1, self = u.c[0] - 1;
	for (int i = 1; i < u.c.size(); i++) {
		state v = u;
		v.c[0] += v.c[i];
		v.c.erase(v.c.begin() + i);
		ret += u.c[i] * dfs(v);
	}
	// E[u] = 1 + E[v] * p + E[u] * q
	ret = (ret / total) + 1;
	ret = ret / (1 - self / total);
	return ret;
}
开发者ID:JohnXinhua,项目名称:UVa,代码行数:23,代码来源:11600+-+Masud+Rana.cpp

示例2: bfs

int bfs(state init) {
	for (int i = 0; i < hash_mod; i++)
		hash[i].clear();
	int h = init.hash(), ti, tj;
	state u, v;
	queue<state> Q;
	Q.push(init), hash[h][init] = 0;
	while (!Q.empty()) {
		u = Q.front(), Q.pop();
		h = u.hash();
		int step = hash[h][u];
		if (u.g[2][4] == 'w' && u.g[2][5] == 'w') {
//			u.print();
			return step;
		}
		for (int i = 0; i < 6; i++) {
			for (int j = 0; j < 6; j++) {
				if (u.g[i][j] < 'a' || u.g[i][j] > 'z')
					continue;
				ti = i, tj = j;
				v = u;
				while (ti-1 >= 0 && v.g[ti-1][tj] == ' ' && ti+1 < 6 && v.g[ti][tj] == v.g[ti+1][tj]) { // shift up
					v = shiftup(v, ti, tj);
					ti--;
					h = v.hash();
					if (hash[h].find(v) == hash[h].end()) {
						hash[h][v] = step+1;
						Q.push(v);
					}
//					v.print();
				}
				ti = i, tj = j;
				v = u;
				while (ti-1 >= 0 && v.g[ti-1][tj] == v.g[ti][tj] && ti+1 < 6 && v.g[ti+1][tj] == ' ') { // shift down
					v = shiftdown(v, ti, tj);
					ti++;
					h = v.hash();
					if (hash[h].find(v) == hash[h].end()) {
						hash[h][v] = step+1;
						Q.push(v);
					}
//					v.print();
				}
				ti = i, tj = j;
				v = u;
				while (tj-1 >= 0 && v.g[ti][tj-1] == ' ' && tj+1 < 6 && v.g[ti][tj] == v.g[ti][tj+1]) { // shift left
					v = shiftleft(v, ti, tj);
					tj--;
					h = v.hash();
					if (hash[h].find(v) == hash[h].end()) {
						hash[h][v] = step+1;
						Q.push(v);
					}
//					v.print();
				}
				ti = i, tj = j;
				v = u;
				while (tj-1 >= 0 && v.g[ti][tj-1] == v.g[ti][tj] && tj+1 < 6 && v.g[ti][tj+1] == ' ') { // shift right
					v = shiftright(v, ti, tj);
					tj++;
					h = v.hash();
					if (hash[h].find(v) == hash[h].end()) {
						hash[h][v] = step+1;
						Q.push(v);
					}
//					v.print();
				}
			}
		}
	}
	return -1;
}
开发者ID:JohnXinhua,项目名称:UVa,代码行数:72,代码来源:10704+-+Traffic.cpp


注:本文中的state::hash方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。