题目:http://codevs.cn/problem/1024/
思路:根据数据建立燕园路口连接矩阵,然后用floyd算法求解最有路径。题目,数据5有误,t与k数据颠倒即可得到答案92。
题解:
/* 1024 一塔湖图 */
#include <stdio.h>
#define DEBUG
#define MAXN 11 /* 最大面积 */
#define MAXT 101 /* 最多道路 */
#define MAXTIME 1000000 /* 最长时间 */
#define IMPOS -1 /* 无法通行标志 */
/* 方向定义 */
#define NORTH 0
#define SOUTH 1
#define WEST 2
#define EAST 3
/* 方向相对坐标 */
int posx[4]={
0,0,-1,1};
int posy[4]={-1,1,0,0};
/* 湖泊结构体,边界(x1,y1), (x2,y2) */
struct _lake{
int x1, y1, x2, y2;
}lake[MAXN];
/* 无法通行道路结构体 */
struct _traffic{
int x1, y1;
int x2, y2;
}traffic[MAXT];
/* 十字路口结构体 */
typedef struct _crossing{
int x;
int y;
}crossing;
int n, m, t, k; /* 燕园尺寸n*m,无法通行道路数t,湖数k */
int an[MAXN], bm[MAXN]; /* 纵,横通行时间 */
crossing a, b; /* 起点位置,图书馆位置 */
int roads[MAXN][MAXN][MAXN][MAXN]; /* 燕园道路图 */
crossing queue[MAXT]; /* floyd操作队列 */