NYOJ有趣的问题(单源最短路径dijkstra)

思路:这题的难度主要是在建图上,建完图之后就是求单源最短路径问题。可用dijkstra算法.要注意他给出的墙的x坐标不是有序 的。

#include
#include
#include
#define MAX 999
struct Position
{
	double x;
	double y;
}p[100]; 
double map[100][100],pos[20][5],dis[100];
int used[100],k;
bool solve(Position p1,Position p2,int bian)
{

	if(p1.x==p2.x)          //如果是一面墙上的点则不考虑 
	  return false;
	  double left=p1.xp2.x?p1.x:p2.x;
	if(pos[bian][0]<=left||pos[bian][0]>=right)   // 如果该墙不在这两点连线的范围之内则也不考虑 
	 return true;
	double a,b,posY;
	a=(p1.y-p2.y)/(p1.x-p2.x);
	b=p1.y-p1.x*a;
	posY=a*pos[bian][0]+b;
	if(posY>=pos[bian][1]&&posY<=pos[bian][2]||posY>=pos[bian][3]&&posY<=pos[bian][4])  
 		return true;
	return false;
}
double dist(Position p1,Position p2)
{
	double res=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
	return res;
}
double djks(int s)
{
	memset(used,0,sizeof(used));
	double min;
	int i,j,u;
	for(i=0;i<=k;i++)
	 	dis[i]=map[s][i];
	dis[i]=0;
	for(i=1;i<=k;i++)
	{
		min=MAX;
		for(j=1;j<=k;j++)
		{
			if(used[j]!=1&&dis[j]


你可能感兴趣的:(图论)