1、 int gety(int n2); void Input();/以文件方式输入地图信息 void ShowMap();/easyx显示地图;int CFixedMap:getx(int n1) int x=0; for(int i=0;imVexNum;i+) if(n1=mVexsi.num) x=mVexsi.x; return x;gety(int n2) int y=0; if(n2=mVexsi.num) y=mVexsi.y; return y;void CFixedMap:Input() int panju; char fname10=map2.txt coutpanju; i
2、f(panju=2) coutfname; ifstream file(fname); char use1100; char use2100; char use3100; char use4100; /use数组用来储存提示信息。 fileuse1; /端点个数use2;mEdgNum; /边数use3;i+) /输入所有点的信息 filemVexsi.nummVexsi.xmVexsi.y;use4; for(i=0;i+) /输入连通点编号combi.num1combi.num2; file.close();ShowMap() initgraph(800,600,SHOWCONSOLE|
3、NOCLOSE); /初始化绘图环境 setbkcolor(WHITE); /设置背景色 cleardevice(); /用背景色清空屏幕 setfillcolor(BLACK); /设置填充色 /画顶点i+) fillcircle(mVexsi.x,mVexsi.y,5); settextcolor(BLACK); char sMAX; sprintf(s, %d, i+1); outtextxy(mVexsi.x-10,mVexsi.y-20,s); /给实际连通的顶点连线 setlinecolor(RGB(0,0,0); setlinestyle(PS_SOLID,6,NULL,0);
4、cpi.x1=getx(combi.num1); cpi.y1=gety(combi.num1); cpi.x2=getx(combi.num2); cpi.y2=gety(combi.num2); line(cpi.x1,cpi.y1,cpi.x2,cpi.y2);class CPathPlan:public CFixedMappublic: int pathMAX; /存放最后一个点 double distMAX; /存放路径距离 int v0; /起始点 int route40; /路径 int rnum; /路径顶点数 Coordinate rpointsMAX;/路径点集 void
5、MaptoGraph(); void Dijstra(); void Putpath();void CPathPlan:MaptoGraph() rnum=0; int a,b,x,y; for(int j=0;jj+) if(i=j) mMatrixij=0; else mMatrixij=maxD; if (combi.num1) a=combi.num1-1; b=combi.num2-1; x=mVexsa.x-mVexsb.x; y=mVexsa.y-mVexsb.y; mMatrixab=sqrt(x*x+y*y); mMatrixba=sqrt(x*x+y*y);Dijstra(
6、)输入起点:v0; v0-; int sMAX; int v; int i; int j; int w; double min; for(v=0;vv+) /初始化S,dist,path sv=0; /0表示未求出最短路径 distv=mMatrixv0v; /开始时假定为最短路径 if(distvmaxD & v!=v0) pathv=v0; /直达情况 else pathv=-1; /无直达路径 distv0=0; /初始时v0属于s集,v0到v0路径最短 sv0=1; for(i=1;i+) /假设由一个中转点到达会近些,验证。再假设由两个中转点到达会近些,验证。穷举 min=maxD;
7、 for(w=0;ww+) /找一个最近到的点,下标装入v if(sw=0 & distwmin) /点w不属于s集且离v0更近 v=w; /经点w中转 min=distw; sv=1; /将v并入S,由v0到达v点最短距离为min,假设由v0到v再由v到其余各点,更新当前最后一个点及距离 for(j=0; if(sj=0 & (min+mMatrixvjdistj) /如果多经过一个点v到点j的距离更短,更新 distj=min+mMatrixvj; pathj=v; /点的序号 Putpath() int opp20; int z; int i=0;输入终点:z; z-; int next
8、; ofstream file2(fops.txt); if(distz z!=v0) /如果有路径 oppi+=mVexsz.num; /终点 next=pathz; /第一个点 while(next! oppi+=mVexsnext.num; next=pathnext; /下一个点 oppi=mVexsv0.num; file2路径长度为:distzn /起点v0和最短路径 else if(z!=v0) /无路径mVexsz.num-mVexsv0.numno path for(int j=0;i+1; routej=oppi-j; file2路径为: for(j=0;i;routej
9、rnum=i+1;routei; file2.close();rnum; rpointsi.x=getx(routei); rpointsi.y=gety(routei); rpointsi.num=routei;class CAGV int speed; /AGV速度 int width; /AGV宽度 int length; /AGV长度 CAGV(); int getl(); int getw(); int gets();CAGV:CAGV()是否自动设置AGV信息?是,2: speed=8; width=6; length=6;输入AGV的长:length;输入AGV的宽:width;
10、输入AGV的速度(1-10):speed;int CAGV:getl() return length;getw() return width;gets() return speed;class CAGVShow:public CPathPlan,public CAGV#define k (abs(y2-y1)/(abs(x1-x2) int a,b,c,d; int x1,x2,y1,y2; int i,j; int l,w,s; void show();void CAGVShow:show() l=getl(); w=getw(); s=11-gets(); for(int o=0;ox1&
11、y2y1) for(j=1;x2-x1; a=x1+j-l; b=y1+j*k+w; c=x1+j+l; d=y1+j*k-w; setfillcolor(RGB(0,0,0); rectangle(a,b,c,d); clearrectangle(a-1,b-k,c,d-k); setlinecolor(RED); line(x1+j,y1+j*k,x2,y2); setlinecolor(GREEN); line(x1,y1,x1+j,y1+j*k); if(j%2=0) setfillcolor(RGB(255,255,0); circle(x2,y2,5); Sleep(s); if(
12、x2y2(y2-y1); setfillcolor(BLUE); rectangle(x1-l,y1+j+w,x1+l,y1+j-w); setfillcolor(WHITE); rectangle(x1,y1+j+w-1,x1+1,y1+j-1-w); clearrectangle(x1-l-1,y1+(j-1)+w,x1+l-1,y1+(j-1)-w); line(x1,y1+j,x2,y2); line(x1,y1,x1,y1+j); if(y2(y1-y2); rectangle(x1-l,y1-j+w,x1+l,y1-j-w); rectangle(x1,y1-j+w-1,x1+1,
13、y1-j-1-w); clearrectangle(x1-l-1,y1-(j-1)+w,x1+l-1,y1-(j-1)-w); line(x1,y1-j,x2,y2); line(x1,y1,x1,y1-j);成功显示!n getch(); / 按任意键继续 closegraph(); / 关闭图形界面 void main() CAGVShow a; int panju; a.Input();多次演示? if(panju=1) for(int i=0;20; a.ShowMap(); a.MaptoGraph(); a.Dijstra(); a.Putpath(); a.show(); pan
14、ju=0; cout if(panju=1) break; else a.ShowMap(); a.MaptoGraph(); a.Dijstra(); a.Putpath(); a.show();相关文件/map2.txt点的个数(输入所有数据前请换行):16连线条数:26依次输入所有点的编号,x,y坐标(用空格隔开):1 50 50 2 250 50 3 550 50 4 750 50 5 50 150 6 250 150 7 550 150 8 750 150 9 50 350 10 250 350 11 550 350 12 750 350 13 50 550 14 250 550 15 550 550 16 750 550输入所有互相连通的点的编号:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1