[のCSPシミュレーションゲーム9] --dfs2

  DFS

コード:

書式#include <アルゴリズム> 
書式#include <iostreamの> 
の#include <cstdioを> 
std名前空間を使用しました。
INTのN、M、P、Q、ANS1、ANS2、lenの; 
INTのANS [35]、合計[35]。
OK BOOL [35]。
構造体haochi 
{ 
	int型のZL、JG、CTB。  
	INTのTOT、DR [35]。
	フレンドブール演算子<(CONST haochi&X、CONST haochi&Y)
	{x.zl <y.zl返します。} 
}湯[35]。
ボイドDFS(INTハオ、INTレイ、INT銭)
{ 
	IF(銭> m)のリターン; 
	(ハオ== N + 1)であれば
	{ 
		IF((LEI> ANS1)||(LEI == ANS1 &&銭> ANS2))
		{ 
			LEN = 0。
			(; iが<= N I ++ iは1 = INT)のための
			IF(OK [i])とANS [++ LEN = I。
			ANS1 =レイ。
			ANS2 =銭。
		}
		返します。
	} 
	IF(レイ+(N-ハオ+ 1)<ANS1 ||(レイ+(N-ハオ+ 1)== ANS1 &&銭+和[ハオ] <= ANS2))リターン。
	(湯[ハオ] .ctb)であれば
	{ 
		DFS(ハオ+ 1、LEI、銭)。
		返します。
	} 
	OK [ハオ] = 1。
	以下のために(INT I = 1; I <=優[ハオ] .tot; ++ I)ゆう[ゆう[ハオ] .DR [I] CTB ++。
	DFS(ハオ+ 1、レイ+ 1、+銭湯[ハオ] .jg)。
	[ハオ] = 0 OK。
	以下のために(INT I = 1; I <=優[ハオ] .tot; ++ I)ゆう[ゆう[ハオ] .DR [I] ctb--。

	DFS(LEIハオ+ 1、銭)。
} 
int型のmain()
{ 
	freopenは( "fish.in"、 "R"、STDIN)。
	freopenは( "fish.out"、 "W"、STDOUT)。
	CIN >> M >> N。
	( "%d個の%のD"、&湯[I] .zl、&湯[I] .jg)scanfのため(++ I; iは= N <I = 1 INT)。
	ソート(湯+ 1、湯+ 1 + N)。
	一方、(scanf関数( "%D%dの"、&P、&Q)&& P && q)は
		湯[P] .DR [++湯[P] .tot] = Q。
		湯[Q] .DR [++湯[Q] .tot] = P。
	} 
	DFS(1,0,0)。
	coutの<< ANS1 <<」「<< ANS2 <<てendl; 
	( "%Dを\ n"、ANS [i])とのprintfをするための(iは++; iは= LEN <I = 1 INT)。
	FCLOSE(STDIN); FCLOSE(STDOUT)。
	0を返します。
} 
/ * 
170 7 
1 70 
2 50 
3 30 
4 40 
5 40 
6 30 
7 20 
1 4 
1 7 
3 4 
3 5 
5 7 
6 7 
0 0 
* /

 

おすすめ

転載: www.cnblogs.com/yelir/p/11600344.html