c语言迪杰斯拉算法,麻烦改成迪杰特拉斯算法

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

using namespace std;

const int n=5; //n表示公园图中顶点个数

const int e=7; //e表示公园图中路径

bool visited[n+1];

#define max 32767

class graph

{

public:

int arcs[n+1][n+1]; //领接矩阵

int a[n+1][n+1]; //距离

//int money[][] ;

int path[n+1][n+1]; //景点

void floyd(graph &t,const int n); //弗洛伊德算法

void picture();

void creatp(graph &t);

void BFS(graph t); //广度优先算法

};

void graph::picture() //公园图

{

printf("\n -----青山湖公园导游图-----\n\n");

printf(" 1.入口点 2.青山湖 \n");

printf(" 3.科技楼 4.信息楼 \n");

printf(" 5.出口点 \n \n");

printf(" 以下为景点之间的距离:\n\n");

printf(" 1.入口点--->2.青山湖 距离为:3\n");

printf(" 1.入口点--->3.科技楼 距离为:10\n");

printf(" 2.青山湖--->3.科技楼 距离为:4\n");

printf(" 2.青山湖--->4.信息楼 距离为:9\n");

printf(" 3.科技楼--->4.信息楼 距离为:5\n");

printf(" 3.科技楼--->5.出口点 距离为:3\n");

printf(" 4.信息楼--->5.出口点 距离为:2\n\n");

}

void graph::creatp(graph &t) //景区景点图

{

int i,j;

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

if(i==j)t.arcs[i][j]=0; //景点一样则距离为0

else t.arcs[i][j]=max; //i不等于j时

t.arcs[1][2]=3;

t.arcs[1][3]=8;

t.arcs[2][1]=3;

t.arcs[2][4]=9;

t.arcs[2][3]=4;

t.arcs[3][1]=8;

t.arcs[3][2]=4;

t.arcs[3][4]=5;

t.arcs[3][5]=3;

t.arcs[4][2]=9;

t.arcs[4][3]=5;

t.arcs[4][5]=2;

t.arcs[5][3]=3;

t.arcs[5][4]=2;

} //把景点跟距离用一个二围数组存储下来

void graph::floyd(graph &t,const int n) //弗洛伊德算法寻找给定的加权图中顶点间最短路径

{

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

{

t.a[i][j]=t.arcs[i][j]; //把距离赋值给a.[i][j]

if((i!=j)&&(a[i][j]

t.path[i][j]=i;

else t.path[i][j]=0;

}

for(int k=1;k<=n;k++)

{

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

if(t.a[i][k]+t.a[k][j]

{

t.a[i][j]=t.a[i][k]+t.a[k][j];

t.path[i][j]=t.path[k][j];

}

}

}

void graph::BFS(graph t) //从顶点i出发实现广度搜索搜索n

{

int j,i; //f,r分别为队列头,尾指针

char ch;

cout<

cin>>i;

while(i<=5)

{

if(i==1)cout<

else

{

for(j=1;j<=n;j++)

{

if(i!=j)

{

cout<

int next=t.path[i][j];

cout<

while(next!=i)

{

cout<

next=t.path[i][next];

}

cout<

}

}

cout<

}

cin>>ch;

if(ch=='y')

{

if(i==2) cout<

if(i==3) cout<

if(i==4) cout<

cout<

cin>>ch;

if(ch=='y')

cout<

cout<

cin>>ch;

if(ch=='y')

{

cout<

cin>>i;}

if(ch!='y')

{

cout<

cout<

break;

}

}

else break;

}

}

int main()

{

graph t;

t.picture();

t.creatp(t);

t.floyd(t,n);

t.BFS(t);

}

你可能感兴趣的:(c语言迪杰斯拉算法)