A*(A_star)鎼滅储鎬荤粨

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了A*(A_star)鎼滅储鎬荤粨相关的知识,希望对你有一定的参考价值。

鏍囩锛?a href='http://www.mamicode.com/so/1/%e9%a2%98%e7%9b%ae' title='棰樼洰'>棰樼洰   a*   oid   闃呰   绠楁硶   浜哄伐鏅鸿兘   while   浠g爜   amp   

(A^*(A star))鎼滅储鎬荤粨

鏍囩锛氱畻娉曗€斺€旀悳绱?br /> 闃呰浣撻獙锛?a href="https://zybuluo.com/Junlier/note/1299772" class="uri">https://zybuluo.com/Junlier/note/1299772

瀹氫箟

(A^*)绠楁硶鍦ㄤ汉宸ユ櫤鑳戒腑鏄竴绉嶅吀鍨嬬殑鍚彂寮忔悳绱㈢畻娉?br /> 鍚彂涓殑浼颁环鏄敤浼颁环鍑芥暟琛ㄧず鐨勶細
h(n)=f(n)+g(n)
鍏朵腑f(n)鏄妭鐐筺鐨勪及浠峰嚱鏁?br /> g(n)琛ㄧず瀹為檯鐘舵€佺┖闂翠腑浠庡垵濮嬭妭鐐瑰埌n鑺傜偣鐨勫疄闄呬唬浠?br /> h(n)鏄粠n鍒扮洰鏍囪妭鐐规渶浣宠矾寰勭殑浼拌浠d环銆?br /> 鍙﹀瀹氫箟h鈥?n)涓簄鍒扮洰鏍囪妭鐐规渶浣宠矾寰勭殑瀹為檯鍊笺€?br /> 濡傛灉h鈥?n)鈮(n)鍒欏鏋滃瓨鍦ㄤ粠鍒濆鐘舵€佽蛋鍒扮洰鏍囩姸鎬佺殑鏈€灏忎唬浠风殑瑙?br /> 閭d箞鐢ㄨ浼颁环鍑芥暟鎼滅储鐨勭畻娉曞氨鍙?span class="math inline">(A^*)绠楁硶銆?/p>

鏈夌偣绻佺悙锛屼絾涔熺湅寰楄繃鍘?/p>

閫氫織鏉ヨ

(A^*)鐨勬牳蹇冨湪浜庝笂闈㈡墍璁插埌鐨?strong>浼颁环鍑芥暟
浠栨槸骞蹭粈涔堢敤鐨勫憿
灏辨槸鎴戜滑鍦ㄦ悳绱㈢殑杩囩▼涓紝淇濊瘉鏇翠紭鐨勫厛鎼滅敤鐨?br /> 杩樻槸鏈変簺绻佺悙瀵逛笉瀵癸紝鍡紝鎴戜篃涓嶅ぇ浼氳鍟婏紙娌′簨鎴戜細鍔犳补锛?/p>


鍢匡紝璁ょ湡鐪嬩笅闈紝鎴戝彲璁ょ湡浜嗙殑鍟?/del>銆傘€傘€?/p>

濡傛灉涓€涓鐩姹傛垜浠眰鍓岾涓?/strong>浠d环鏈€灏忕殑瑙o紙鍙槸涓€涓吀鍨嬶紝涓嶆槸鎵€鏈夐鐩兘杩欐牱锛?br /> 鍋囪鎴戜滑鐜板湪鏈変竴涓姸鎬佸湪(now)
宸茬粡瑕佽褰曞埌绛旀閲岄潰鐨勪唬浠锋槸(D)(鎴戝枩娆㈢敤杩欎釜)
鎴戜滑鍙戠幇濡傛灉鐖嗘悳鐨勮瘽鐘舵€佷細鏄贡鐨勫涓嶅锛岃偗瀹氫細浣挎悳绱㈡悳鍒板お澶?br /> 鑰屽鏋滅洿鎺ユ妸鐘舵€佹寜鐓?span class="math inline">(D)鎺掑簭鐨勮瘽涓嶈兘淇濊瘉绛旀灏变細姝g‘锛堝綋鐒讹紝涓嶇劧灏卞幓璐績鍘伙級
鎵€浠ユ垜浠紩杩涗竴涓?strong>浼颁环鍑芥暟(g[鐘舵€乚)

褰撶劧瑕佹眰涓€鑸槸鍙互棰勫鐞嗗嚭涓€涓姸鎬佸埌绛旀鐘舵€佺殑鏈€浼樿В
鍥炲埌鍓嶉潰璁插埌鐨勫綋鍓嶇姸鎬?span class="math inline">(now)
濡傛灉鎴戜滑鎶婁笌(now)骞跺垪鐨勬墍鏈夌姸鎬佹寜(D+g[now])鎺掑簭鍛紵
鏃笉褰卞搷绛旀鐨勬纭€э紝鍙堝彲浠ュ噺灏戝潖鐘舵€佺殑杞Щ
锛堝洜涓洪鐩姹傛槸K涓渶浼樼姸鎬侊紝鑰岃繖鏍峰緟鍐崇瓥鐘舵€佷細鏈夊簭涓旇窇瀹孠涓氨鍙互缁撴潫锛屾墍浠ヤ細鍙樺揩锛?/p>

濂藉惂锛岃繕鏈夌偣钂欏涓嶅锛岄偅鎴戜滑鐪嬩緥棰?/p>

渚嬮

娲涜胺P2901 [USACO08MAR]鐗涙參璺慍ow Jogging
濂藉儚鍏朵粬寰堝(oj)閮芥湁锛屼絾鏄?span class="math inline">(Bzoj)鏄潈闄愩€傘€傘€?/p>

寰堣8瀵瑰惂锛?/h3>
  1. 棰勫鐞嗕及浠峰嚱鏁?/li>

鍏堣窇涓€閬嶅弽鍚戣竟鐨?span class="math inline">(SPFA)棰勫鐞嗗嚭姣忎釜鐐瑰埌1鐨勬渶鐭矾浣滀负浼颁环鍑芥暟

  1. 鐩存帴璺?span class="math inline">(A^*)(杩欓噷鐢?span class="math inline">(Bfs)瀹炵幇)

浠巒鍙风偣寮€濮?span class="math inline">(Bfs)锛岀敤鍫嗘潵浠f浛闃熷垪锛堝疄鐜颁笂闈㈡墍璁茬殑鎺掑簭锛?br /> 杩欐椂鍊欏厛鍒?鑺傜偣鐨勮偗瀹氱瓟妗堟洿浼橈紙涔熷氨鏄矾寰勬洿鐭級
鍘熷洜寰堢畝鍗曞惂锛?strong>浼颁环鍑芥暟淇濊瘉绛旀鍚堟硶锛岃€屾帓搴忎箣鍚庣瓟妗堟湁搴?/strong>
鎼滃埌K涓埌杈?鑺傜偣鐨勮矾寰勫氨鍙互缁撴潫锛屽揩鐨勯璧枫€傘€傘€?/p>

鏀句釜浠g爜锛?/h3>

濂戒笉瀹规槗鍐欎竴娆℃敞閲?/del>

#include<bits/stdc++.h>
#define lst long long
#define ldb double
#define N 1050
#define M 10050
#define qw ljl[i].to
using namespace std;
const lst Inf=1e15;
int read()
{
    int s=0,m=0;char ch=getchar();
    while(!isdigit(ch)){if(ch=='-')m=1;ch=getchar();}
    while( isdigit(ch))s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
    return m?-s:s;
}

int n,m,K,Done;
bool in[N];
lst dis[N];
queue<int> Q;
int hd[N],cnt;
struct EDGE{int to,nxt,v;}ljl[M<<1];
void Add(int p,int q,int o){ljl[++cnt]=(EDGE){q,hd[p],o},hd[p]=cnt;}
void SPFA()
{
    for(int i=2;i<=n;++i)dis[i]=Inf;
    while(!Q.empty())Q.pop();
    Q.push(1),dis[1]=0,in[1]=true;
    while(!Q.empty())
    {
        int now=Q.front();Q.pop(),in[now]=false;
        for(int i=hd[now];i;i=ljl[i].nxt)
            if(qw>now&&dis[qw]>dis[now]+ljl[i].v)
            {
                dis[qw]=dis[now]+ljl[i].v;
                if(!in[qw])in[qw]=true,Q.push(qw);
            }
    }
}

//h[i]=g[i]+f[i]---->ans[i]=D+dis[i]
struct NODE{
    lst D;int id;
    bool operator<(const NODE &X) const
        {
            return D+dis[id]>X.D+dis[X.id];
        }
};priority_queue<NODE> H;
void A_star_Bfs()
{
    while(!H.empty())H.pop();
    H.push((NODE){0,n});
    while(!H.empty())
    {
        NODE temp=H.top();
        int now=temp.id;H.pop();
        if(now==1)
        {
            printf("%lld
",temp.D);
            if(++Done==K)return;continue;
        }
        for(int i=hd[now];i;i=ljl[i].nxt)
            if(qw<now)H.push((NODE){temp.D+ljl[i].v,qw});
    }while(Done<K)++Done,puts("-1");
}

int main()
{
    n=read(),m=read(),K=read();
    for(int i=1;i<=m;++i)
    {
        int p=read(),q=read(),o=read();
        Add(p,q,o),Add(q,p,o);
    }
    SPFA(),A_star_Bfs();
    return 0;
}
/************

1.A*绠楁硶鍦ㄤ汉宸ユ櫤鑳戒腑鏄竴绉嶅吀鍨嬬殑鍚彂寮忔悳绱㈢畻娉?鍚彂涓殑浼颁环鏄敤浼颁环鍑芥暟琛ㄧず鐨勶細
h(n)=f(n)+g(n)
鍏朵腑f(n)鏄妭鐐筺鐨勪及浠峰嚱鏁?g(n)琛ㄧず瀹為檯鐘舵€佺┖闂翠腑浠庡垵濮嬭妭鐐瑰埌n鑺傜偣鐨勫疄闄呬唬浠?h(n)鏄粠n鍒扮洰鏍囪妭鐐规渶浣宠矾寰勭殑浼拌浠d环銆?鍙﹀瀹氫箟h'(n)涓簄鍒扮洰鏍囪妭鐐规渶浣宠矾寰勭殑瀹為檯鍊笺€?濡傛灉h'(n)鈮(n)鍒欏鏋滃瓨鍦ㄤ粠鍒濆鐘舵€佽蛋鍒扮洰鏍囩姸鎬佺殑鏈€灏忎唬浠风殑瑙?閭d箞鐢ㄨ浼颁环鍑芥暟鎼滅储鐨勭畻娉曞氨鍙獳*绠楁硶銆?
2.绗琄鏈€鐭矾鐨勭畻娉?鎴戜滑璁炬簮鐐逛负s锛岀粓鐐逛负t锛屾垜浠鐘舵€乫(i)鐨刧(i)涓轰粠s璧板埌鑺傜偣i鐨勫疄闄?璺濈锛宧(i)涓轰粠鑺傜偣i鍒皌鐨勬渶鐭窛绂伙紝浠庤€屾弧瓒矨*绠楁硶鐨勮姹傦紝
褰撶K娆¤蛋鍒癴(n-1)鏃惰〃绀烘鏃剁殑g(n-1)涓虹K鏈€鐭矾闀垮害銆?
3.杩欓噷鏄痥uai鐨剎zy鐨勩€傘€傘€傚埆鎬垜銆傘€傘€?
*************/ 

鎬荤粨

鏆傛椂灏卞皢杩欎箞澶氬惂
涓昏鏄湅鍒扮綉涓婃病鏈夊啓鐨勯偅涔堥€氫織鐨?span class="math inline">(A^*)鎼滅储
灏辨兂鑷繁鎬荤粨涓€涓嬶紙鍏跺疄涔熶笉閫氫織銆傘€傘€?/del>锛?br /> 鎾ゆ挙鎾ゆ簻浜嗘簻浜哶______

以上是关于A*(A_star)鎼滅储鎬荤粨的主要内容,如果未能解决你的问题,请参考以下文章

Java鎬荤粨

python缃戠粶缂栫▼鎬荤粨

琛ㄦ牸鎬荤粨

SQL璇彞鎬荤粨

闃舵涓€-02.鍒嗙被锛屾帹鑽愶紝鎼滅储锛岃瘎浠凤紝璐墿杞﹀紑鍙?绗?绔?鍟嗗搧鎺ㄨ崘+鎼滅储鍔熻兘瀹炵幇-2-1 鍟嗗搧鎺ㄨ崘 - 闇€姹傚垎鏋愪笌sql鏌ヨ

瀹胯垗绠$悊绯荤粺绛旇京闂鎬荤粨