sicily1703. Obstacle Course
来源:互联网 发布:直播淘宝小二 编辑:程序博客网 时间:2024/06/05 18:25
一道很典型的最短路径的题目。
算法的思想来自于Dijkstra(迪杰斯特拉)算法,大家在这里对这个算法就不介绍了。
可以在学完最短经的算法后,用这道题目当做练手。。我的算法还需要优化一下,代码也需要优化,因为我的代码确实有点乱。。下面的代码仅供参考。。
题目的链接:http://soj.me/1703
#include <iostream>#include <stdio.h>#include <string>#include <cstring>#include <queue>#include <set>#include <vector>using namespace std;int dis[130][130];struct Gra{ int r; int c; friend bool operator <(Gra g1, Gra g2) { if(dis[g1.r][g1.c] < dis[g2.r][g2.c]) return true; }};int main(){ int t; int count = 1; while (cin >> t && t != 0) { int s[130][130]; for (int i = 1; i <= t; ++ i) { for (int j = 1; j <= t; ++ j) { cin >> s[i][j]; } } set<Gra> q; int know[130][130]; memset(know, 0, sizeof(know)); memset(dis, 9999999, sizeof(dis)); Gra tu[16900]; tu[1].r = 1; tu[1].c = 1; q.insert(tu[1]); Gra temp; int i = 2; dis[1][1] = s[1][1]; set<Gra>::iterator it; set<Gra>::iterator itt; while (!q.empty()) { it = q.begin(); temp = *it; itt = it; ++ it; Gra tem; for (; it != q.end(); ++ it) { tem = *it; if (dis[temp.r][temp.c] > dis[tem.r][tem.c]) { temp = tem; itt = it; } } q.erase(itt); know[temp.r][temp.c] = 1; if (temp.r == t && temp.c == t) { cout << "Problem " << count << ": " << dis[temp.r][temp.c] << endl; break; } if (temp.c - 1 >= 1) { tu[i].c = temp.c - 1; tu[i].r = temp.r; if (know[tu[i].r][tu[i].c] == 0) { if (dis[tu[i].r][tu[i].c] > dis[temp.r][temp.c] + s[tu[i].r][tu[i].c]) { dis[tu[i].r][tu[i].c] = dis[temp.r][temp.c] + s[tu[i].r][tu[i].c]; q.insert(tu[i]); ++ i; } } } if (temp.r - 1 >= 1) { tu[i].r = temp.r - 1; tu[i].c = temp.c; if (know[tu[i].r][tu[i].c] == 0) { if (dis[tu[i].r][tu[i].c] > dis[temp.r][temp.c] + s[tu[i].r][tu[i].c]) { dis[tu[i].r][tu[i].c] = dis[temp.r][temp.c] + s[tu[i].r][tu[i].c]; q.insert(tu[i]); ++ i; } } } if (temp.c + 1 <= t) { tu[i].c = temp.c + 1; tu[i].r = temp.r; if (know[tu[i].r][tu[i].c] == 0) { if (dis[tu[i].r][tu[i].c] > dis[temp.r][temp.c] + s[tu[i].r][tu[i].c]) { dis[tu[i].r][tu[i].c] = dis[temp.r][temp.c] + s[tu[i].r][tu[i].c]; q.insert(tu[i]); ++ i; } } } if (temp.r + 1 <= t) { tu[i].r = temp.r + 1; tu[i].c = temp.c; if (know[tu[i].r][tu[i].c] == 0) { if (dis[tu[i].r][tu[i].c] > dis[temp.r][temp.c] + s[tu[i].r][tu[i].c]) { dis[tu[i].r][tu[i].c] = dis[temp.r][temp.c] + s[tu[i].r][tu[i].c]; q.insert(tu[i]); ++ i; } } } } ++ count; } //system("pause");}
- sicily1703. Obstacle Course
- pku2374 Fence Obstacle Course
- poj2374 Fence Obstacle Course
- Sicily 1703. Obstacle Course
- HDU 3152 Obstacle Course
- hdu 3152 Obstacle Course
- hdu 3152 Obstacle Course
- hd3152 Obstacle Course
- HDU3152 Obstacle Course(BFS)
- POJ2374-Fence Obstacle Course
- hdu 3152 Obstacle Course
- poj 2374 Fence Obstacle Course
- hdu 3152 Obstacle Course (bfs)
- 【搜索】 HDU 3152 Obstacle Course
- HDU--3152Obstacle Course【BFS】
- POJ 2374Fence Obstacle Course
- [USACO07OCT] 障碍路线Obstacle Course
- 1703. Obstacle Course(最短路径bfs)
- sicily6135. Blackjack
- sicily1940. Ordering Tasks
- sicily1321. Robot
- sicily1825. Nickname
- hdu 题目4217 Data Structure?(线段树,单点更新)
- sicily1703. Obstacle Course
- sicily1122. Prerequisites?
- sicily1198. Substring
- CHM格式打不开解决方案
- sicily1155. Can I Post the lette
- sicily1625. Binary Clock
- [置顶] sicily1007. To and Fro
- sicily1010. Zipper
- CATransition用于场景转换