Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _USE_MATH_DEFINES
- #include<stdio.h>
- #include<iostream>
- #include<vector>
- #include<cmath>
- #include<algorithm>
- #include<map>
- #include<set>
- #include<sstream>
- #include<cstring>
- #include<numeric>
- #include<limits.h>
- using namespace std;
- const int N = 505;
- vector<pair<int, int> > g[N];
- int a[N][N];
- int n, m;
- long long res = LLONG_MAX;
- long long ans[N * N * 10];
- long long d[N * N];
- int p[N * N];
- int id = 0;
- int index(int x, int y) {
- return x * m + y;
- }
- void dijkstra(int s) {
- fill_n(d, N * N, LLONG_MAX);
- fill_n(p, N * N, -1);
- d[s] = 0LL;
- set < pair<long long, int> > q;
- q.insert(make_pair(d[s], s));
- while (!q.empty()) {
- int v = q.begin()->second;
- q.erase(q.begin());
- for (int j = 0; j<g[v].size(); ++j) {
- int to = g[v][j].first,
- len = g[v][j].second;
- if (d[v] + len < d[to]) {
- q.erase(make_pair(d[to], to));
- d[to] = d[v] + len;
- p[to] = v;
- q.insert(make_pair(d[to], to));
- }
- }
- }
- for (int i = 0; i < m; i++) {
- int ind = index(n - 1, i);
- if (d[index(n - 1, i)] + a[ind / m][ind % m] < res) {
- res = d[index(n - 1, i)] + a[ind / m][ind % m];
- id = 0;
- for (int c = ind; c != -1; c = p[c], id++) {
- ans[id] = c % m + 1;
- }
- }
- }
- }
- int main() {
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- #endif
- scanf("%d%d", &n, &m);
- if (n > 100 || m > 500)
- throw;
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- scanf("%d", &a[i][j]);
- }
- }
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < m; j++) {
- if (j - 1 >= 0) {
- g[index(i, j)].push_back(make_pair(index(i, j - 1), a[i][j]));
- }
- if (j + 1 < m) {
- g[index(i, j)].push_back(make_pair(index(i, j + 1), a[i][j]));
- }
- if (i + 1 < n) {
- g[index(i, j)].push_back(make_pair(index(i + 1, j), a[i][j]));
- }
- }
- }
- for (int i = 0; i < m; i++) {
- dijkstra(i);
- }
- //printf("%d\n", res);
- for (int i = id - 1; i >= 0; i--) {
- printf("%d ", ans[i]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement