ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

¶Ôÿ¸ö±¦²Ø½øÐÐÒ»´ÎSPFA(Ò»)
2013-12-05 13:05:37 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:284´Î
Tags£ºÃ¿¸ö ±¦²Ø ½øÐÐ Ò»´Î SPFA

    ÕâµÀÌâÊdz¤É³ÑûÇëÈüµÄÌ⣬µ±Ê±ÊǵÀÇ©µ½Ìâ¡£
    ÕâÖÖÌ⻹ÊǺܳ£¼ûµÄ£¬½²Ò»ÏÂ˼·¡£
    Ê×ÏÈÊÇÔ¤´¦Àí³öÿ¸ö±¦²ØÖ®¼äµÄ¾àÀ룬»¹Óе½±ßµÄ¾àÀ룬ֱ½Ó¶Ôÿ¸ö±¦²Ø½øÐÐÒ»´ÎSPFA¾Í¿ÉÒÔÁË¡£
    È»ºó¾ÍÊǾ­µäµÄÇóTSPµÄ¹ý³Ì¡£
    #include <set>
    #include <map>
    #include <stack>
    #include <cmath>
    #include <queue>
    #include <cstdio>
    #include <string>
    #include <vector>
    #include <iomanip>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    #define Max 2505
    #define FI first
    #define SE second
    #define ll long long
    #define PI acos£¨-1.0£©
    #define inf 1111111111
    #define LL£¨x£© £¨ x ¡¶ 1 £©
    #define bug puts£¨"here"£©
    #define PII pair<int,int>
    #define RR£¨x£© £¨ x ¡¶ 1 | 1 £©
    #define mp£¨a,b£© make_pair£¨a,b£©
    #define mem£¨a,b£© memset£¨a,b,sizeof£¨a£©£©
    #define infA£¨a£© for £¨int i = 0 ; i <= n ; ++ i£©a[i] = inf ;
    #define REP£¨i,s,t£© for£¨ int i = £¨ s £© ; i <= £¨ t £© ; ++ i £©
    using namespace std;
    inline void RD£¨int &ret£© {
    char c;
    do {
    c = getchar£¨£©£»
    } while£¨c < '0' || c > '9'£© ;
    ret = c - '0';
    while£¨£¨c=getchar£¨£©£© >= '0' && c <= '9'£©
    ret = ret * 10 + £¨ c - '0' £©£»
    }
    inline void OT£¨int a£© {
    if£¨a >= 10£©OT£¨a / 10£© ;
    putchar£¨a % 10 + '0'£© ;
    }
    #define N 222
    #define K 15
    int Map[N][N] ;
    struct tru {
    int x ,y ;
    } tk[K] ;
    int tt ;
    int MM[K][K] ;
    int dp[1 ¡¶ K][K] ;
    int dis[N][N] ;
    bool vis[N][N] ;
    PII qe[1111111] ;
    int D[K] ;
    int n , m ;
    int mx = {0 , 0 , 1 , -1} ;
    int my = {1 , -1 , 0 , 0} ;
    int inmap£¨int x ,int y£© {
    if£¨x >= 0 && x < n && y >= 0 && y < m && Map[x][y] != -1£©return 1 ;
    return 0 ;
    }
    void init£¨int pos£© {
    for £¨int i = 0 ; i < n ; i ++ £© {
    for £¨int j = 0 ; j < m ; j ++ £© {
    dis[i][j] = inf ;
    vis[i][j] = 0 ;
    }
    }
    dis[tk[pos].x][tk[pos].y] = Map[tk[pos].x][tk[pos].y] == -1 inf : 0 ;
    int h = 0 , t = 0 ;
    qe[h ++ ] = mp£¨tk[pos].x ,tk[pos].y£© ;
    while£¨h > t£© {
    PII tp = qe[t ++ ] ;
    vis[tp.FI][tp.SE] = 0 ;
    if£¨tp.FI == 0 || tp.FI == n - 1 || tp.SE == 0 || tp.SE == m - 1£© {
    D[pos] = min£¨D[pos] , dis[tp.FI][tp.SE]£© ;
    }
    for £¨int i = 0 ; i < 4 ; i ++ £© {
    int tx = tp.FI + mx[i] ;
    int ty = tp.SE + my[i] ;
    if£¨inmap£¨tx , ty£©£© {
    if£¨dis[tx][ty] > dis[tp.FI][tp.SE] + Map[tx][ty]£© {
    dis[tx][ty] = dis[tp.FI][tp.SE] + Map[tx][ty] ;
    if£¨£¡vis[tx][ty]£© {
    vis[tx][ty] = 1 ;
    qe[h ++ ] = mp£¨tx ,ty£© ;
    }
    }
    }
    }
    }
    }
    int main£¨£© {
    #ifndef ONLINE_JUDGE
    freopen£¨"in.txt","r",stdin£© ;
    freopen£¨"out.txt","w",stdout£© ;

   

Ê×Ò³ ÉÏÒ»Ò³ 1 2 3 4 5 ÏÂÒ»Ò³ βҳ 1/5/5
¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£º¹ØÓÚ״ѹDPµÄÒ»µÀÌâ ÏÂһƪ£ºÍõ×ÓÑ¡¹«Ö÷½á»éPOJÎÊÌâ

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ:

¡¤Linuxϵͳ¼ò½é (2025-12-25 21:55:25)
¡¤Linux°²×°MySQL¹ý³Ì (2025-12-25 21:55:22)
¡¤Linuxϵͳ°²×°½Ì³Ì£¨ (2025-12-25 21:55:20)
¡¤HTTP Åc HTTPS µÄ²î„ (2025-12-25 21:19:45)
¡¤ÍøÕ¾°²È«±ØÐ޿ΣºÍ¼ (2025-12-25 21:19:42)