#include
#define elemtype int
using namespace std;
const int n=8;//图中顶点数
const int e=15;// 图中的边数
const int max=1000;
int visited[n+1];//访问标志数组,为0表示未访问,为1表示已访问
int dist[n];//dist[i]存放从v到顶点i的最短路径
struct graph{//定义图的数据类型
elemtype v[n+1];//存放顶点信息v1,v2。。。vn,不使用v[0]存储空间
int arcs[n+1][n+1];//邻接矩阵
int w;//权值
};
int path[n];// path[i]存放在最短路径上从顶点i到前一点的顶点号
//该数组的作用是各点到指定始点的路径链成一条仿真链
int s[n];//s[i]=1表示顶点i的最短路径已经求出,s[i]=0表示未求出
void creat(){ //建立邻接矩阵
int i,j,k,w;
graph g;
cout<<"请输入"<
cin>>g.v[k];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
g.arcs[i][j];
for(k=1;k<=e;k++){
cout<<"请输入第"<
cout<
g.arcs[j][i]=1;
}
}
void dfs(int i, graph g){//从顶点i出发进行深度优先搜索遍历
int j;
cout<
for(j=1;j<=n;j++)
if(g.arcs[i][j]==1&&!visited[j])
dfs(j,g);
}
void bfs(int i, graph g){//从顶点i出发进行广度优先搜索遍历
int q[n+1];//q为队列
int f,r,j;//f、r分别为队头、队尾指针
f=r=0;//初始化队列
cout<
r++;q[r]=i;//入队
while(f
for(j=1;j<=n;j++)
if((g.arcs[i][j]==1&&!visited[j])){
cout<
r++;q[r]=j;//入队列
}
}
}
void shortestpath(const int v, graph g)
{ int i, j, k ,wm,max;
for(i=0;i
if (i!=v && dist[i]
};
s[v]=1; dist[v]=0; //将顶点v本身排除在外
for(k=0;k
for(i=0;i
{j=i;wm= dist[i];}
s[j]=1;
for(i=0;i
{dist[i] = dist[j] +g.arcs[j][i];
path[i] = j;
}
}
}
int main(){
int i,j,v;
int yn=1;
graph g;
creat();
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)
cout<
while(yn==1){
for(i=1;i<=n;i++)
visited[i]=0;
cout<<"请输入深度优先搜索开始访问的顶点:";
cin>>i;
cout<
cout<
}
yn=1;
while(yn==1){
for(i=1;i<=n;i++)
visited[i]=0;
cout<<"请输入广度优先搜索开始访问的顶点:";
cin>>i;
cout<
cout<
}
cout<<"请输入顶点v的值:";
cin>>v;
shortestpath(v,g);
cout<
return 0;
}