亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? a.cpp

?? 用C++編寫的A STAR算法
?? CPP
字號:
//#define NDEBUG
#include <stdio.h> 
#include <conio.h> 
#include <assert.h> 
#include <stdlib.h>
#include <string.h>

#define tile_num(x,y) ((y)*map_w+(x)) //將 x,y 坐標轉換為地圖上塊的編號
#define tile_x(n) ((n)%map_w) //由塊編號得出 x,y 坐標
#define tile_y(n) ((n)/map_w)

#define MAPMAXSIZE 180 //地圖面積最大為 180x180,如果沒有64K內存限制可以更大
#define MAXINT 32767

//樹結構, 比較特殊, 是從葉節點向根節點反向鏈接,方便從葉節點找到根節點
typedef struct tree_node *TREE;

struct tree_node {
int h; //節點所在的高度,表示從起始點到該節點所有的步數
int tile; //該節點的位置
TREE father; //該節點的上一步
};

//鏈接結構,用于保存處理過的和沒有處理過的結點
typedef struct link_node *LINK;

struct link_node {
TREE node;
int f;
LINK next;
};

LINK sort_queue; // 保存沒有處理的行走方法的節點
LINK store_queue; // 保存已經處理過的節點 (搜索完后釋放)

unsigned char * map; //地圖數據
unsigned int * dis_map; //保存搜索路徑時,中間目標地最優解

int map_w,map_h; //地圖寬和高
int start_x,start_y,end_x,end_y; //地點,終點坐標

// 初始化隊列
void init_queue()
{
sort_queue=(LINK)malloc(sizeof(*sort_queue));
sort_queue->node=NULL;
sort_queue->f=-1;
sort_queue->next=(LINK)malloc(sizeof(*sort_queue));
sort_queue->next->node=NULL;
sort_queue->next->f=MAXINT;
sort_queue->next->next=NULL;

store_queue=(LINK)malloc(sizeof(*store_queue));
store_queue->node=NULL;
store_queue->f=-1;
store_queue->next=NULL;

}
// 待處理節點入隊列, 依靠對目的地估價距離插入排序
void enter_queue(TREE node,int f)
{
LINK p=sort_queue,father,q;
while(f>p->f) {
father=p;
p=p->next;
assert(p);
}
q=(LINK)malloc(sizeof(*q));
assert(sort_queue);
q->f=f,q->node=node,q->next=p;
father->next=q;
}

// 將離目的地估計最近的方案出隊列
TREE get_from_queue()
{
LINK bestchoice=sort_queue->next;
LINK next=sort_queue->next->next;
sort_queue->next=next;

bestchoice->next=store_queue->next;
store_queue->next=bestchoice;
return bestchoice->node;
}

// 釋放棧頂節點
void pop_stack()
{
LINK s=store_queue->next;
assert(s);
store_queue->next=store_queue->next->next;
free(s->node);
free(s);
}

// 釋放申請過的所有節點
void freetree()
{
//int i;
LINK p;
while(store_queue){
p=store_queue;
free(p->node);
store_queue=store_queue->next;
free(p);
}
while (sort_queue) {
p=sort_queue;
free(p->node);
sort_queue=sort_queue->next;
free(p);
}
}

// 估價函數,估價 x,y 到目的地的距離,估計值必須保證比實際值小
int judge(int x,int y)
{
int distance;
distance=abs(end_x-x)+abs(end_y-y);
return distance;
}

// 嘗試下一步移動到 x,y 可行否
int trytile(int x,int y,TREE father)
{
TREE p=father;
int h;
if (map[tile_num(x,y)]!=' ') return 1; // 如果 (x,y) 處是障礙,失敗
//這一步用來判斷(x,y)點是否已經加入隊列,多余可以刪除,因為dis_map已經
//保存該點是否已經保存
//while (p) {
// if (x==tile_x(p->tile) && y==tile_y(p->tile)) return 1; //如果 (x,y) 曾經經過,失敗
// p=p->father;
//}
h=father->h+1;
if (h>=dis_map[tile_num(x,y)]) return 1; // 如果曾經有更好的方案移動到 (x,y) 失敗
dis_map[tile_num(x,y)]=h; // 記錄這次到 (x,y) 的距離為歷史最佳距離

// 將這步方案記入待處理隊列
p=(TREE)malloc(sizeof(*p));
p->father=father;
p->h=father->h+1;
p->tile=tile_num(x,y);
enter_queue(p,p->h+judge(x,y));
return 0;
}

// 路徑尋找主函數
int * findpath(void)
{
TREE root;
int i,j;
int * path;
memset(dis_map,0xff,map_h*map_w*sizeof(*dis_map)); //填充dis_map為0XFF,表示各點未曾經過
init_queue();
root=(TREE)malloc(sizeof(*root));
root->tile=tile_num(start_x,start_y);
root->h=0;
root->father=NULL;
enter_queue(root,judge(start_x,start_y));
for (;;) {
int x,y,child;
TREE p;
root=get_from_queue();
if (root==NULL) {
return NULL;
}
x=tile_x(root->tile);
y=tile_y(root->tile);
if (x==end_x && y==end_y) break; // 達到目的地成功返回

child=trytile(x,y-1,root); //嘗試向上移動
child&=trytile(x,y+1,root); //嘗試向下移動
child&=trytile(x-1,y,root); //嘗試向左移動
child&=trytile(x+1,y,root); //嘗試向右移動
//child&=trytile(x+1,y-1,root);//嘗試向右上移動
//child&=trytile(x+1,y+1,root); //嘗試向右下移動
//child&=trytile(x-1,y+1,root); //嘗試向左下移動
//child&=trytile(x-1,y-1,root); //嘗試向左上移動

if (child!=0)
pop_stack(); // 如果四個方向均不能移動,釋放這個死節點
}

// 回溯樹,將求出的最佳路徑保存在 path[] 中
path=(int*)malloc((root->h+2)*sizeof(int));
assert(path);
for (i=0;root;i++) {
path[i]=root->tile;
root=root->father;
}
path[i]=-1;
freetree();
return path;
}

void printpath(int *path)
{
int i;
if(path==NULL) return ;
for (i=0;path[i]>=0;i++) {
gotoxy(tile_x(path[i])+1,tile_y(path[i])+1);
cprintf(".");
}
}

int readmap()
{
FILE *f;
unsigned int i,j;
f=fopen("map.dat","r");
assert(f);
fscanf(f,"%d,%d\n",&map_w,&map_h);
map=malloc(map_w*map_h+1);
assert(map);
for(i=0;i!=fgets(map+tile_num(0,i),map_w+2,f););//
fclose(f);
start_x=-1,end_x=-1;
for (i=0;i for (j=0;j if (map[tile_num(j,i)]=='s') map[tile_num(j,i)]=' ',start_x=j,start_y=i;
if (map[tile_num(j,i)]=='e') map[tile_num(j,i)]=' ',end_x=j,end_y=i;
}
assert(start_x>=0 && end_x>=0);
dis_map=malloc(map_w*map_h*sizeof(*dis_map));
assert(dis_map);
return 0;
}

void showmap()
{
int i,j;
clrscr();
for (i=0;i gotoxy(1,i+1);
for (j=0;j if (map[tile_num(j,i)]!=' ') cprintf("O");
else cprintf(" ");
}
gotoxy(start_x+1,start_y+1);
cprintf("s");
gotoxy(end_x+1,end_y+1);
cprintf("e");
}

int main()
{
int * path;
readmap();
showmap();
getch();
path=findpath();
printpath(path);
if(dis_map) free(dis_map);
if(path) free(path);
if(map) free(map);
getch();
return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本美女一区二区| 欧美日韩色综合| 欧美性受xxxx| 精品1区2区在线观看| 国产精品色呦呦| 亚洲chinese男男1069| 国产乱人伦偷精品视频不卡| 色婷婷av一区二区三区软件| 精品久久久久久久久久久久久久久| 欧美国产精品一区| 久久国产精品色婷婷| 在线视频一区二区三| 欧美韩国日本一区| 免费观看一级特黄欧美大片| 91色综合久久久久婷婷| 久久久久97国产精华液好用吗 | 欧美最猛性xxxxx直播| 欧美大尺度电影在线| 亚洲影院免费观看| 成人h版在线观看| 久久在线免费观看| 亚洲一区二区欧美日韩 | 欧美日韩一级黄| 综合久久一区二区三区| 国产99精品在线观看| 欧美精品一区二区三区四区| 日韩在线播放一区二区| 91成人免费在线视频| 18成人在线视频| 成人美女视频在线看| 国产欧美日韩另类一区| 国产一区二区福利| 日韩欧美成人一区| 奇米色777欧美一区二区| 欧美日韩成人在线一区| 午夜伦理一区二区| 在线播放一区二区三区| 亚洲在线视频一区| 欧美三电影在线| 亚洲国产成人av网| 精品视频一区二区不卡| 亚洲成人av资源| 91精品国产91久久久久久一区二区| 一区二区在线免费观看| 欧美日韩三级在线| 日本不卡高清视频| 日韩欧美第一区| 国产福利一区在线观看| 国产精品视频第一区| 大白屁股一区二区视频| 国产精品超碰97尤物18| 色综合久久久久| 日韩毛片精品高清免费| 欧美在线综合视频| 日韩电影在线观看网站| 久久久亚洲午夜电影| 99久久婷婷国产| 亚洲影院免费观看| 337p粉嫩大胆色噜噜噜噜亚洲| 精品一区二区久久久| 国产精品国产三级国产普通话蜜臀| 色综合夜色一区| 日韩黄色免费电影| 国产午夜精品久久久久久久 | 国内一区二区视频| 久久久久久9999| 91麻豆精品秘密| 青草国产精品久久久久久| 国产视频视频一区| 一本久道久久综合中文字幕| 无码av中文一区二区三区桃花岛| 欧美一区二区三区男人的天堂| 国产毛片一区二区| 亚洲老妇xxxxxx| 日韩欧美一区中文| voyeur盗摄精品| 免费成人av在线| 国产精品久久久久久久岛一牛影视| 欧美日韩国产区一| 国产91丝袜在线播放0| 一区二区三区影院| 久久精子c满五个校花| 在线观看免费视频综合| 国产精品1区2区3区在线观看| 亚洲精品日产精品乱码不卡| 精品国产伦一区二区三区免费| 91啪九色porn原创视频在线观看| 免费成人在线观看视频| 亚洲柠檬福利资源导航| 久久男人中文字幕资源站| 欧美日韩中文字幕一区| 99久久精品国产一区二区三区| 日本成人在线网站| 亚洲黄色在线视频| 中文字幕成人在线观看| 欧美mv和日韩mv的网站| 91尤物视频在线观看| 美女诱惑一区二区| 亚洲激情成人在线| 欧美国产欧美亚州国产日韩mv天天看完整 | 一区二区三区免费观看| 国产视频不卡一区| 久久久久久97三级| 久久综合九色综合欧美亚洲| 欧美日韩国产乱码电影| 在线观看中文字幕不卡| 91在线免费播放| www.99精品| 97精品国产97久久久久久久久久久久| 激情综合网av| 激情亚洲综合在线| 激情五月婷婷综合| 国产麻豆视频精品| 国产一区二区三区在线观看免费视频 | 国产一区二区三区四区五区入口| 日本中文字幕一区二区视频| 亚洲成人自拍一区| 亚洲最色的网站| 亚洲第一久久影院| 婷婷六月综合网| 水蜜桃久久夜色精品一区的特点 | 国产精品久久看| 日本一区二区三区久久久久久久久不 | 国产欧美精品一区二区三区四区| 亚洲精品一区在线观看| 精品理论电影在线| 久久久午夜电影| 久久免费精品国产久精品久久久久| 欧美mv和日韩mv国产网站| 国产日本欧美一区二区| 欧美国产激情一区二区三区蜜月| 久久九九99视频| 日韩一区欧美一区| 一二三区精品视频| 视频一区中文字幕国产| 蜜桃久久久久久久| 国产精品一区专区| 成人91在线观看| 欧美唯美清纯偷拍| 欧美福利视频一区| 日韩精品一区二区三区四区 | 中文字幕亚洲区| 亚洲精品视频一区二区| 午夜久久久久久| 国产乱淫av一区二区三区| 91啪亚洲精品| 日韩精品一区二| 亚洲欧美日韩一区| 日本大胆欧美人术艺术动态| 国产不卡视频在线观看| 欧美日韩精品一区二区天天拍小说| 日韩免费一区二区三区在线播放| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲欧美视频在线观看视频| 免费在线看成人av| av在线播放一区二区三区| 欧美美女一区二区三区| 国产色一区二区| 亚洲自拍与偷拍| 国产成人av电影免费在线观看| 欧美亚洲丝袜传媒另类| www国产成人免费观看视频 深夜成人网| 国产精品五月天| 亚洲最快最全在线视频| 国产乱人伦偷精品视频免下载| heyzo一本久久综合| 欧美日韩一区二区三区高清| 日韩精品一区二区三区老鸭窝| 亚洲人成在线播放网站岛国| 日韩av中文字幕一区二区三区| 国产a级毛片一区| 蜜桃视频一区二区三区在线观看| 91一区二区三区在线观看| 91精品国产综合久久福利软件| 国产亚洲精品超碰| 亚洲精品国产高清久久伦理二区| 国产一区二区三区国产| aaa欧美大片| 日韩免费视频一区二区| 中文字幕欧美日韩一区| 婷婷一区二区三区| 99久久综合色| 日韩精品中午字幕| 日韩国产成人精品| 色中色一区二区| 欧美激情在线看| 国产精品一区二区你懂的| 欧美日韩国产在线播放网站| 国产免费观看久久| 蜜臀久久久久久久| 5858s免费视频成人| 亚洲精品日日夜夜| 成人免费看黄yyy456| 久久久久久久久蜜桃| 麻豆精品久久久| 69堂成人精品免费视频| 日韩精品色哟哟| 欧美亚洲综合在线| 亚洲欧美激情在线| 国产成人自拍高清视频在线免费播放|