| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
最普通的深度遍历算法答案,不想看答案者慎入!!!// 9319497 sui1999 1062 Accepted 1032K 63MS G++ 1465B 2011-09-15 19:47:34
#include <iostream>
#include <fstream>
#include <cstring>
#define MAX_NUMS 200
#define MAX_INT 0x7FFFFFFF
#define abs(a) (a) > 0 ? (a) : -(a)
using namespace std;
int graph [MAX_NUMS][MAX_NUMS][2], m, n, p, l, x, t, v, sum, result, history[MAX_NUMS], history_size;
bool visited [MAX_NUMS];
bool check(int index)
{
for(int i = 0; i < history_size; i++)
if(graph[index][index][1] - history[i] < -m || graph[index][index][1] - history[i] > m)
return false;
return true;
}
void dfs(int index, int temp)
{
visited[index] = true;
history[history_size++] = graph[index][index][1];
if(graph[index][index][0] + temp < sum)
sum = graph[index][index][0] + temp;
for(int i = 0; i < n; i++)
{
if(!visited[i] && graph[index][i][0] && check(i))
dfs(i, temp + graph[index][i][0]);
}
history_size--;
visited[index] = false;
}
int main()
{
//std::ifstream cin("case_in");
memset(graph, 0, sizeof(graph)), sum = MAX_INT;
for(int i = 0; i < MAX_NUMS; i++)
visited[i] = false;
cin >> m >> n;
for(int i = 0; i < n; i++)
{
cin >> p >> l >> x, graph[i][i][0] = p, graph[i][i][1] = l;
for(int j = 0; j < x; j++)
cin >> t >> v, graph[i][t-1][0] = v;
}
dfs(0, 0);
std::cout << sum << std::endl;
//cin.close();
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator