最近舍友突然說起a*演算法 雖然之前看過 但是我發現自己記得不是很清楚了 而且從來沒去手動實現過 趁著這次就實現一下加深理解 去網上查了下原理 看了幾篇別人的實現 然後按自己理解綜合一下寫出來記錄一下(我參考那篇程式執行有好幾個問題,而且執行得出路徑也是不對的,不知道他有沒跑過的。)
astar.h
#ifndef astar_h
#define astar_h
#include
#include
#include
#include
#include
using
namespace
std;
typedef
struct node
node(int x,int y,node* father)
}node;
class astar;
#endif
astar.cpp
#include "stdafx.h"
#include "astar.h"
intmap[101][101] =
, ,,,
,,
};astar::astar()
astar::~astar()
void astar::search( node* startpos,node* endpos )
nextstep(current);
closelist.push_back(current);
openlist.erase(openlist.begin());
sort(openlist.begin(),openlist.end(),compare);
}}void astar::checkpoit( int x,int y,node* father,int g)
}else
}void astar::nextstep( node* current )
int astar::iscontains(vector
* nodelist, int x,int y )
}return -1;
}void astar::countghf( node* snode,node* enode,int g)
bool astar::compare( node* n1,node* n2 )
bool astar::unwalk( int x,int y)
void astar::printpath( node* current )
void astar::printmap()
printf("\n");
}}
main.h
#include "stdafx.h"
#include "astar.h"
using
namespace
std;
int _tmain(int argc, _tchar* argv)
這個是可以直接執行的 得出的路徑我仔細看過了 也是沒問題的
編輯下:這個寫法大的地圖會有效率問題 是因為容器頻繁刪除導致的大小重新分配導致的 你可以新增乙個輔助棧 然後像上面那樣容器排序 再按排序順序從最後乙個開始壓入棧 最後改為移除棧上第乙個元素 不修改容器的大小了
c 實現svm SVM演算法實現
前面我們介紹了svm演算法的原理,這裡通過python以及小例子來實現svm演算法。這裡主要介紹兩個例子,乙個例子通過調包實現svm,乙個例子通過程式設計實現。一 癌症資料集 資料來自國外某醫院癌症資料,資料量為100,劃分70條記錄用於訓練集,資料如下所示 圖中diagnosis result是癌...
c 實現rsa演算法 RSA演算法實現過程
rsa演算法是實現非對稱加密的一種演算法,其用到很多有關數論的內容,在此我們不多討論。而將目光聚焦於演算法的實現過程。rsa過程 第二步 計算n a b 61 53 3233 第三步 計算 a 1 b 1 60 52 3120 第四步 選擇與3120互質的乙個數e 17,這個e也就是我們的公鑰,需要...
SUNDAY 演算法 c 實現
public class sunday 實現sunday演算法 public int findchr string str,string sfind str length str.length fin length sfind.length while start fin length str le...