码迷,mamicode.com
首页 > 其他好文 > 详细

UVa 10557 - XYZZY

时间:2015-07-24 10:49:31      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

題目:一個迷宮有很多個房間,以及他們的聯通關係,初始化有100的能量值,

            每進入一個房間能量值會獲得當前房間對應的能量數值(可以為負),

            如果能量為負則不能移動,房間可以反復走(對應的值可以反復獲得),

            問從1號房間出發,能否走到n號房間。

分析:圖論,最短路。利用spfa迭代求解,最後判斷到達終點的值即可。

            初始化到達所有房間時的能量值都為零,利用spfa求解到達每個房間的最大能量值即可;

            如果存在遞增的環,則迭代到上界停止即可(設為100n,從他能到達的每個點都是正的)

           (也可使用搜索嵌套求解,外層判斷是否有環以及無環時能否到達,內層判斷環能否到達終點)

說明:這個月寫的題好少╮(╯▽╰)╭。

#include <cstring>
#include <cstdio>

int energy[101];

// link_list define
typedef struct _link_list
{
	int point;
	_link_list* next;
}link_list;
link_list* link_head[105];
link_list  link_node[20202];
int  	   link_size;

void link_initial()
{
	link_size = 0;
	memset(link_head, 0, sizeof(link_head));
}

void link_insert(int a, int b)
{
	link_node[link_size].point = b;
	link_node[link_size].next = link_head[a];
	link_head[a] = &link_node[link_size ++];
}
// link_list end

int instack[105],stack[105],power[105];
int spfa(int s, int n)
{
	for (int i = 1; i <= n; ++ i)
		instack[i] = power[i] = 0;
	int top = 0, now;
	stack[top ++] = s;
	power[s] = 100;
	instack[s] = 1;
	while (top) {
		now = stack[-- top];
		for (link_list*p = link_head[now]; p; p = p->next) {
			if (power[p->point] > 100*n) continue;
			if (power[p->point] < power[now]+energy[p->point]) {
				power[p->point] = power[now]+energy[p->point];
				if (!instack[p->point]) {
					if (p->point == n) return 1;
					instack[p->point] = 1;
					stack[top ++] = p->point;
				}
			}
		}
		instack[now] = 0;
	}
	return power[n];
}

int main()
{
	int n,m,v;
	while (~scanf("%d",&n) && n != -1) {
		//读数据&建图 
		link_initial();
		for (int i = 1; i <= n; ++ i) {
			scanf("%d%d",&energy[i],&m);
			for (int j = 0; j < m; ++ j) {
				scanf("%d",&v);
				link_insert(i, v);
			}
		}
		
		if (n == 1 || spfa(1, n))
			printf("winnable\n");
		else printf("hopeless\n");
	}
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

UVa 10557 - XYZZY

标签:

原文地址:http://blog.csdn.net/mobius_strip/article/details/47036035

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!