| ||||||||||
| 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 | |||||||||
附上 POJ 和 ZOJ 的代码吧哈哈// POJ
// ============
// 1122. FDNY to the Rescue!.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
typedef pair<int, int> PII;
const int N = 30, INF = 0x3f3f3f3f;
int g[N][N], dis[N], pre, n, st[N], sa, en, pa[N], psz;
PII fs[N];
int fsz;
void Init() {
memset(st, 0, sizeof st);
}
void dijkstra() {
memset(dis, INF, sizeof dis);
dis[sa] = 0;
for (int i = 0; i < n; ++i) {
int t = -1;
for (int j = 1; j <= n; ++j) {
if (!st[j] && (t == -1 || dis[j] < dis[t])) {
t = j;
}
}
st[t] = 1;
for (int j = 1; j <= n; ++j) {
if (g[t][j] != -1) {
dis[j] = min(dis[j], dis[t] + g[t][j]);
}
}
}
}
void path(int x) {
psz = 0;
while (sa != x) {
pa[psz++] = x;
for (int i = 1; i <= n; ++i) {
if (i == x || g[i][x] == -1) continue;
if (g[i][x] + dis[i] == dis[x]) {
x = i;
break;
}
}
}
pa[psz] = sa;
for (int i = 0; i <= psz; ++i) {
printf("%d", pa[i]);
if (i != psz) printf("\t");
else printf("\n");
}
}
int main()
{
#ifdef _DEBUG
#pragma warning(disable: 4996)
freopen("in.txt", "r", stdin);
#endif // _DEBUG
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
scanf("%d", &g[j][i]);
}
}
scanf("%d", &sa);
int tmp; fsz = 0;
while (~scanf("%d", &tmp)) {
fs[fsz++].second = tmp;
}
Init();
dijkstra();
printf("Org\tDest Time Path\n");
for (int i = 0; i < fsz; ++i) {
fs[i].first = dis[fs[i].second];
}
sort(fs, fs + fsz);
for (int i = 0; i < fsz; ++i) {
printf("%d\t%d\t%d\t", fs[i].second, sa, fs[i].first);
path(fs[i].second);
}
return 0;
}
// ============
// ZOJ
// ============
// FDNY to the Rescue!.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <sstream>
using namespace std;
typedef pair<int, int> PII;
const int N = 30, INF = 0x3f3f3f3f;
int g[N][N], dis[N], pre, n, st[N], sa, en, pa[N], psz;
PII fs[N];
int fsz;
void Init() {
memset(st, 0, sizeof st);
}
void dijkstra() {
memset(dis, INF, sizeof dis);
dis[sa] = 0;
for (int i = 0; i < n; ++i) {
int t = -1;
for (int j = 1; j <= n; ++j) {
if (!st[j] && (t == -1 || dis[j] < dis[t])) {
t = j;
}
}
st[t] = 1;
for (int j = 1; j <= n; ++j) {
if (g[t][j] != -1) {
dis[j] = min(dis[j], dis[t] + g[t][j]);
}
}
}
}
void path(int x) {
psz = 0;
while (sa != x) {
pa[psz++] = x;
for (int i = 1; i <= n; ++i) {
if (i == x || g[i][x] == -1) continue;
if (g[i][x] + dis[i] == dis[x]) {
x = i;
break;
}
}
}
pa[psz] = sa;
for (int i = 0; i <= psz; ++i) {
printf("%d", pa[i]);
if (i != psz) printf("\t");
else printf("\n");
}
}
int main()
{
#ifdef _DEBUG
#pragma warning(disable: 4996)
freopen("in.txt", "r", stdin);
#endif // _DEBUG
int T; scanf("%d", &T);
while (T--) {
scanf("%d", &n);
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
scanf("%d", &g[j][i]);
}
}
scanf("%d", &sa);
int tmp; fsz = 0;
string line;
getline(cin, line);
stringstream ss(line);
while (ss >> tmp) {
fs[fsz++].second = tmp;
}
Init();
dijkstra();
printf("Org\tDest Time Path\n");
for (int i = 0; i < fsz; ++i) {
fs[i].first = dis[fs[i].second];
}
sort(fs, fs + fsz);
for (int i = 0; i < fsz; ++i) {
printf("%d\t%d\t%d\t", fs[i].second, sa, fs[i].first);
path(fs[i].second);
}
if (T) puts("");
}
return 0;
}
// ============
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator