wza1 2021-06-15 13:50 采纳率: 57.1%
浏览 32
已采纳

以下这段C++代码为啥跑不了?

#include<cstdio>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
const int N=100,M=100;
int n,m;
bool map[N][M]; 
class map
{
	private:
		bool **p;
		int n,m;
		inline bool isin(const int x1,const int y1,const int x2,const int y2,const int i,const int j)
		{
			return (((i>=((x1>x2)?x2:x1))&&(i<=((x1>x2)?x1:x2)))&&((j>=((y1>y2)?y2:y1))&&(j<=((y1>y2)?y1:y2))));
		}
		struct point
		{
			static int tar_x,tar_y;
			int x,y,b_dis;
			int f_dis()
			{
				return abs(x-tar_x)+abs(y-tar_y);
			}
			bool operator<(point b)
			{
				return (b_dis+f_dis())>(b.b_dis+b.f_dis());
			}
		};
	public:
		map(const int N,const int M)
		{
			n=N;
			m=M;
			p=new bool*[N+1];
			for(int i=1;i<=N;i++)
				p[i]=new bool[M+1];
		}
		~map()
		{
			for(int i=1;i<=n;i++)
				delete[] p[i];
			delete[] p;
		}
		void set_obstruction(const int x,const int y)
		{
			p[x][y]=true;
			return;
		}
		void set_obstruction(const int x1,const int y1,const int x2,const int y2)
		{
			for(int i=1;i<=n;i++)
				for(int j=1;j<=m;j++)
					if(isin(x1,y1,x2,y2,i,j))
						p[i][j]=true;
			return;
		}
		int get_way(const int x1,const int y1,const int x2,const int y2)
		{
			priority_queue<point> q;
			point::tar_x=x2;
			point::tar_y=y2;
			point start;
			start.x=x1;
			start.y=y1;
			q.push(start);
		}
};
int main()
{
	
	return 0;
}
//我想写一个A*寻路实现,但是这段BFS的优先队列似乎因为结构体的重载运算符跑不了了(555~~),求大佬告知怎么改啊? 
  • 写回答

2条回答 默认 最新

  • qfl_sdu 2021-06-15 14:19
    关注

    操作符和f_dis函数加上const修饰,代码修改如下:

    #include<cstdio>
    #include<cmath>
    #include<queue>
    #include<vector>
    using namespace std;
    const int N=100,M=100;
    int n,m;
    bool map[N][M]; 
    class map
    {
    private:
    	bool **p;
    	int n,m;
    	inline bool isin(const int x1,const int y1,const int x2,const int y2,const int i,const int j)
    	{
    		return (((i>=((x1>x2)?x2:x1))&&(i<=((x1>x2)?x1:x2)))&&((j>=((y1>y2)?y2:y1))&&(j<=((y1>y2)?y1:y2))));
    	}
    	struct point
    	{
    		static int tar_x,tar_y;
    		int x,y,b_dis;
    		int f_dis() const  //修改1
    		{
    			return abs(x-tar_x)+abs(y-tar_y);
    		}
    		bool operator<(const point b)const   //修改2
    		{
    			return (b_dis+f_dis())>(b.b_dis+b.f_dis());
    		}
    	};
    public:
    	map(const int N,const int M)
    	{
    		n=N;
    		m=M;
    		p=new bool*[N+1];
    		for(int i=1;i<=N;i++)
    			p[i]=new bool[M+1];
    	}
    	~map()
    	{
    		for(int i=1;i<=n;i++)
    			delete[] p[i];
    		delete[] p;
    	}
    	void set_obstruction(const int x,const int y)
    	{
    		p[x][y]=true;
    		return;
    	}
    	void set_obstruction(const int x1,const int y1,const int x2,const int y2)
    	{
    		for(int i=1;i<=n;i++)
    			for(int j=1;j<=m;j++)
    				if(isin(x1,y1,x2,y2,i,j))
    					p[i][j]=true;
    		return;
    	}
    	int get_way(const int x1,const int y1,const int x2,const int y2)
    	{
    		priority_queue<point> q;
    		point::tar_x=x2;
    		point::tar_y=y2;
    		point start;
    		start.x=x1;
    		start.y=y1;
    		q.push(start);
    	}
    };
    int main()
    {
    
    	return 0;
    }
    //我想写一个A*寻路实现,但是这段BFS的优先队列似乎因为结构体的重载运算符跑不了了(555~~),求大佬告知怎么改啊? 
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler