【OJ】A*(start)算法c++初步实现

简介: /* A* 算法 2014/11/5 吴成兵 改进中 BFS是A*算法中最笨的一种 */#include#include#include#include#include#includeusing namespace std;co...



<span style="font-size:14px;">/*
	A* 算法 2014/11/5 吴成兵 
	改进中 
	BFS是A*算法中最笨的一种 
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<queue>
#include<algorithm>

using namespace std;
const int INF=888;//200
char a[11][11];

// 起点和终点可以任意修改 //坐标原点在左上角,行为y,横列为x 
const int sy=1,sx=3,ey=8,ex=2;//开始(1,3) 目的(5,2) 

int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};//四个方向(本来是八个) 

struct FIELD{
	int f,g,h;  //h=f+g
	int y,x;    //f为开始到本地距离,g为本地到目的地距离 
}b[10][10];
////priority_queue<int,vector<int>,greater<int> >pq;
//bool cmp(const FIELD &a,const FIELD &b){
//	return a.h>b.h;
//}
struct cmp{                         //用于构造逆的优先队列 
	bool operator()(const FIELD a,const FIELD b)const{
		return a.h>b.h;
	}
};

void A(){
	priority_queue<FIELD,vector<FIELD>,cmp>q;
	q.push(b[sy][sx]);
	while(!q.empty()){
		FIELD f=q.top();q.pop();//FIELD
		if(f.x==ex&&f.y==ey)break;
		for(int i=0;i<4;i++){
			int nx=f.x+dx[i],ny=f.y+dy[i];
			if(nx>=0&&nx<10&&ny>=0&&ny<10&&a[ny][nx]!='#'&&b[ny][nx].h==INF/**/){
				FIELD next;     //FIELD
				/*h=f+g*/
				next.f=sqrt(pow(ny-sy,2)+pow(nx-sx,2))*10;//到起点10倍距离 //?墙 
				next.g=(fabs(ny-ey)+fabs(nx-ex))*10;      //xy方向到终点10倍距离 
				next.h=next.f+next.g;
				next.y=ny; next.x=nx; 
				
				b[ny][nx].h=next.h;//存数值 
				b[ny][nx].f=next.f;//
				b[ny][nx].g=next.g;//
				
				q.push(next);
				
				if(ny!=ey||nx!=ex) //用&&会断路效应 
					a[ny][nx]='.';
			}
		} 
	} 
}

int main(){
	
//	memset(b,-1,sizeof(b));
	for(int i=0;i<10;i++){
		for(int j=0;j<10;j++){
			b[i][j].h=INF;
		}
	}
	a[3][2]=a[3][3]=a[3][4]=a[3][5]=a[3][6]=a[2][7]='#';  //栅栏可以任意修改 
	a[sy][sx]='*';a[ey][ex]='$';                  //起点和终点标志 
//	for(int i=0;i<11;i++)a[10][i]='-';
	for(int i=0;i<10;i++)a[i][10]='|';            //用于显示边界 
	b[sy][sx].h=b[sy][sx].f=b[sy][sx].g=0;
	b[sy][sx].y=sy;b[sy][sx].x=sx;
	
	A();/**/ 
////	
////	pq.push(2);
////	pq.push(12);
////	pq.push(2);
////	pq.push(32);
////	while(!pq.empty()){
////		cout<<pq.top()<<endl;
////		pq.pop();
////	}

	for(int i=0;i<10;i++){//11           //输出地图 
		for(int j=0;j<11;j++)cout<<a[i][j];cout<<endl;
	}
	for(int i=0;i<10;i++){              //输出数值图 
		for(int j=0;j<10;j++){
//			if(b[i][j].h==INF)cout<<"    ";
//			else 
				printf("%3d",b[i][j].h);
//			cout<<i<<" "<<j<<" "<<b[i][j].f<<" "<<b[i][j].g<<" "<<b[i][j].h<<endl;
		}
		cout<<endl;
	}
	return 0;
}
</span>


**Wu_Being博客声明**:本人博客欢迎转载,请标明博客原文和原链接!谢谢! 

《A*(start)算法c++初步实现》:

http://blog.csdn.net/u014134180/article/details/40838319


如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。


目录
相关文章
|
6月前
|
存储 监控 算法
基于 C++ 哈希表算法实现局域网监控电脑屏幕的数据加速机制研究
企业网络安全与办公管理需求日益复杂的学术语境下,局域网监控电脑屏幕作为保障信息安全、规范员工操作的重要手段,已然成为网络安全领域的关键研究对象。其作用类似网络空间中的 “电子眼”,实时捕获每台电脑屏幕上的操作动态。然而,面对海量监控数据,实现高效数据存储与快速检索,已成为提升监控系统性能的核心挑战。本文聚焦于 C++ 语言中的哈希表算法,深入探究其如何成为局域网监控电脑屏幕数据处理的 “加速引擎”,并通过详尽的代码示例,展现其强大功能与应用价值。
137 2
|
7月前
|
存储 算法 C++
Windows共享文件:探秘C++实现的B树索引算法奇境
在数字化时代,Windows共享文件的高效管理至关重要。B树算法以其自平衡多路搜索特性,在文件索引与存储优化中表现出色。本文探讨B树在Windows共享文件中的应用,通过C++实现具体代码,展示其构建文件索引、优化数据存储的能力,提升文件检索效率。B树通过减少磁盘I/O操作,确保查询高效,为企业和个人提供流畅的文件共享体验。
|
4月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
113 0
|
5月前
|
存储 机器学习/深度学习 算法
基于 C++ 的局域网访问控制列表(ACL)实现及局域网限制上网软件算法研究
本文探讨局域网限制上网软件中访问控制列表(ACL)的应用,分析其通过规则匹配管理网络资源访问的核心机制。基于C++实现ACL算法原型,展示其灵活性与安全性。文中强调ACL在企业与教育场景下的重要作用,并提出性能优化及结合机器学习等未来研究方向。
134 4
|
6月前
|
监控 算法 数据处理
基于 C++ 的 KD 树算法在监控局域网屏幕中的理论剖析与工程实践研究
本文探讨了KD树在局域网屏幕监控中的应用,通过C++实现其构建与查询功能,显著提升多维数据处理效率。KD树作为一种二叉空间划分结构,适用于屏幕图像特征匹配、异常画面检测及数据压缩传输优化等场景。相比传统方法,基于KD树的方案检索效率提升2-3个数量级,但高维数据退化和动态更新等问题仍需进一步研究。未来可通过融合其他数据结构、引入深度学习及开发增量式更新算法等方式优化性能。
168 17
|
5月前
|
机器学习/深度学习 存储 算法
基于 C++ 布隆过滤器算法的局域网上网行为控制:URL 访问过滤的高效实现研究
本文探讨了一种基于布隆过滤器的局域网上网行为控制方法,旨在解决传统黑白名单机制在处理海量URL数据时存储与查询效率低的问题。通过C++实现URL访问过滤功能,实验表明该方法可将内存占用降至传统方案的八分之一,查询速度提升约40%,假阳性率可控。研究为优化企业网络管理提供了新思路,并提出结合机器学习、改进哈希函数及分布式协同等未来优化方向。
113 0
|
7月前
|
存储 监控 算法
基于 C++ 哈希表算法的局域网如何监控电脑技术解析
当代数字化办公与生活环境中,局域网的广泛应用极大地提升了信息交互的效率与便捷性。然而,出于网络安全管理、资源合理分配以及合规性要求等多方面的考量,对局域网内计算机进行有效监控成为一项至关重要的任务。实现局域网内计算机监控,涉及多种数据结构与算法的运用。本文聚焦于 C++ 编程语言中的哈希表算法,深入探讨其在局域网计算机监控场景中的应用,并通过详尽的代码示例进行阐释。
131 4
|
8月前
|
存储 算法 安全
企业员工数据泄露防范策略:基于 C++ 语言的布隆过滤器算法剖析[如何防止员工泄密]
企业运营过程中,防范员工泄密是信息安全领域的核心议题。员工泄密可能致使企业核心数据、商业机密等关键资产的流失,进而给企业造成严重损失。为应对这一挑战,借助恰当的数据结构与算法成为强化信息防护的有效路径。本文专注于 C++ 语言中的布隆过滤器算法,深入探究其在防范员工泄密场景中的应用。
144 8
|
19天前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
79 2
|
2月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
148 3
下一篇
开通oss服务