程序代码
#include #include #define MAX 100 #define maxD 99999 class CFixedMap { struct Coordinate { int x; int y; int num; };//记录点的结构体 struct combp { int x1,y1; int x2,y2; };//连通点坐标 struct Combname { int num1; int num2; };//连通点名 public: int mVexNum; // 顶点数 int mEdgNum; // 边数 double mMatrix[MAX][MAX]; // 邻接矩阵 Combname comb[MAX]; //连通点名 combp cp[MAX]; //连通点坐标 Coordinate mVexs[MAX]; // 顶点集合 int getx(int n1); int gety(int n2); void Input();//以文件方式输入地图信息 文案大全 实用文案 void ShowMap();//easyx显示地图 }; int CFixedMap::getx(int n1) { int x=0; for(int i=0;i int y=0; for(int i=0;i int panju; char fname[10]={\"map2.txt\ cout<<\"是否载入默认地图?(1:是,2:否)\"; cin>>panju; if(panju==2) { cout<<\"请输入地图信息文件名:\"; cin>>fname; } ifstream file(fname); char use1[100]; char use2[100]; char use3[100]; char use4[100]; //use数组用来储存提示信息。 file>>use1; file>>mVexNum; //端点个数 file>>use2; file>>mEdgNum; //边数 file>>use3; for(int i=0;i 实用文案 file>>mVexs[i].num>>mVexs[i].x>>mVexs[i].y; } file>>use4; for(i=0;i file.close(); } //easyx显示地图 void CFixedMap::ShowMap() { initgraph(800,600,SHOWCONSOLE| NOCLOSE); //初始化绘图环境 setbkcolor(WHITE); //设置背景色 cleardevice(); //用背景色清空屏幕 setfillcolor(BLACK); //设置填充色 //画顶点 for(int i=0;i sprintf(s, \"%d\ outtextxy(mVexs[i].x-10,mVexs[i].y-20,s); } //给实际连通的顶点连线 setlinecolor(RGB(0,0,0)); setlinestyle(PS_SOLID,6,NULL,0); for(i=0;i line(cp[i].x1,cp[i].y1,cp[i].x2,cp[i].y2); } } class CPathPlan:public CFixedMap { public: int path[MAX]; //存放最后一个点 文案大全 实用文案 double dist[MAX]; //存放路径距离 int v0; //起始点 int route[40]; //路径 int rnum; //路径顶点数 Coordinate rpoints[MAX];//路径点集 void MaptoGraph(); void Dijstra(); void Putpath(); }; void CPathPlan::MaptoGraph() { rnum=0; int a,b,x,y; for(int i=0;i mMatrix[i][j]=0; } else { mMatrix[i][j]=maxD; } } } for(i=0;i a=comb[i].num1-1; b=comb[i].num2-1; x=mVexs[a].x-mVexs[b].x; y=mVexs[a].y-mVexs[b].y; mMatrix[a][b]=sqrt(x*x+y*y); mMatrix[b][a]=sqrt(x*x+y*y); } } } void CPathPlan::Dijstra() { 文案大全 实用文案 cout<<\"输入起点:\"; cin>>v0; v0--; int s[MAX]; int v; int i; int j; int w; double min; for(v=0;v dist[v]=mMatrix[v0][v]; //开始时假定为最短路径 if(dist[v] dist[v0]=0; //初始时v0属于s集,v0到v0路径最短 s[v0]=1; for(i=1;i for(w=0;w s[v]=1; //将v并入S,由v0到达v点最短距离为min,假设由v0到v再由v到其余各点,更新当前最后一个点及距离 for(j=0;j void CPathPlan::Putpath() { int opp[20]; 文案大全 实用文案 int z; int i=0; cout<<\"输入终点:\"; cin>>z; z--; int next; ofstream file2(\"fops.txt\"); if(dist[z] next=path[z]; //第一个点 while(next!=v0) { opp[i++]=mVexs[next].num; next=path[next]; //下一个点 } opp[i]=mVexs[v0].num; file2<<\"路径长度为:\"< file2< file2< class CAGV { int speed; //AGV速度 int width; //AGV宽度 int length; //AGV长度 public: 文案大全 实用文案 CAGV(); int getl(); int getw(); int gets(); }; CAGV::CAGV() { int panju; cout<<\"是否自动设置AGV信息?(1:是,2:否)\"; cin>>panju; speed=8; width=6; length=6; if(panju==2) { cout<<\"输入AGV的长:\"; cin>>length; cout<<\"输入AGV的宽:\"; cin>>width; cout<<\"输入AGV的速度(1-10):\"; cin>>speed; } } int CAGV::getl() { return length; } int CAGV::getw() { return width; } int CAGV::gets() { return speed; } class CAGVShow:public CPathPlan,public CAGV { public: #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;o if(y1!=y2&&x1!=x2) { if(x2>x1&&y2>y1){ for(j=1;j 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(x2 实用文案 { for(j=1;j 文案大全 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(x2 for(j=1;j 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(x2>x1&&y2 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); } } } else if(y1==y2) { if(x2>x1) { for(j=1;j<(x2-x1);j++) { setfillcolor(RGB(0,0,0)); rectangle(x1+j-l,y1+w,x1+j+l,y1-w); clearrectangle(x1+j-l-1,y1+w,x1+j+l-1,y1-w); setlinecolor(RED); line(x1+j,y1,x2,y2); setlinecolor(GREEN); line(x1,y1,x1+j,y1); if(j%2==0) { setfillcolor(RGB(255,0,255)); circle(x2,y2,5); 文案大全 实用文案 } Sleep(s); } } if(x2 setfillcolor(RGB(0,0,0)); rectangle(x1-j-l,y1+w,x1-j+l,y1-w); clearrectangle(x1-j-l-1,y1+w,x1-j+l-1,y1-w); setlinecolor(RED); line(x1-j,y1,x2,y2); setlinecolor(GREEN); line(x1,y1,x1-j,y1); if(j%2==0) { setfillcolor(RGB(255,0,255)); circle(x2,y2,5); } Sleep(s); } } } else if(x1==x2) { if(y2>y1) { for(j=1;j<(y2-y1);j++) { 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); setlinecolor(RED); line(x1,y1+j,x2,y2); setlinecolor(GREEN); line(x1,y1,x1,y1+j); if(j%2==0) { setfillcolor(RGB(255,255,0)); 文案大全 实用文案 circle(x2,y2,5); } Sleep(s); } } if(y2 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); setlinecolor(RED); line(x1,y1-j,x2,y2); setlinecolor(GREEN); line(x1,y1,x1,y1-j); if(j%2==0) { setfillcolor(RGB(255,255,0)); circle(x2,y2,5); } Sleep(s); } } } } cout<<\"成功显示!!\\n\"; getch(); // 按任意键继续 closegraph(); // 关闭图形界面 } void main() { CAGVShow a; int panju; a.Input(); cout<<\"多次演示?(1:是,2:否)\"; cin>>panju; if(panju==1) { 文案大全 实用文案 for(int i=0;i<20;i++) { a.ShowMap(); a.MaptoGraph(); a.Dijstra(); a.Putpath(); a.show(); panju=0; cout<<\"是否结束?(1:结束)\"; cin>>panju; 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 输入所有互相连通的点的编号: 1 2 2 3 3 4 5 6 6 7 9 10 10 11 11 12 13 14 14 15 15 16 1 5 5 9 9 13 6 10 10 14 3 7 7 11 11 15 4 8 8 12 12 16 1 6 6 11 6 9 3 12 文案大全 因篇幅问题不能全部显示,请点此查看更多更全内容