#include <stdio.h>
#define INFINITE 9999
#define MAX 10
int A[MAX][MAX];
int visited[MAX];
int V[MAX];
int creatadj(int n,int e,int t)
{
int i,j,k,w;
printf("生成图G\n");
printf("请输入顶点值,输入格式: (number<CR>):");
for(i=1;i<=n;i++)
{
scanf("%d",&V[i]);
printf(" v%d=%d\n",i,V[i]);
}
for(i=1; i<=n; i++)
for(j=1;j<=n;j++)
if(t>2)
A[i][j]=INFINITE;
else
A[i][j]=0;
for(k=1;k<=e;k++)
{
printf("输入边(输入格式:i,j<CR>):\n");
scanf("%d,%d",&i,&j);
printf("i=%d,j=%d,n=%d\n",i,j,n);
if(i>n||j>n)
{
printf("the edge is not right ");
return 0;
}
if(t>2){
printf("input the weight :");
scanf("%d",&w);
A[i][j]=w;
if(t==3)
A[j][i]=w;
}
else{
A[i][j]=1;
if(t==1)
A[j][i]=1;
}
}
return 1;
}
void visit(int i)
{
printf("%d\n",V[i]);
}
void dfs(int i,int n)
{
int j;
visit(i);
visited[i]=1;
for(j=1;j<=n;j++)
if((A[i][j]==1)&&(!visited[j])){
dfs(j,n);
}
}
void printdfs(int i,int n){
dfs(i,n);
int j = 1;
for(;j<=n;i++){
if(!visited[j]){
dfs(j,n);
}
j++;
}
}
void bfs(int i,int n)
{
int Q[10];
int f,r,j;
// for(int k=0;k<=n;k++){
// visited[k]=0;
// }
visit(i);
visited[i]=1;
r++;
Q[r]=i;
while (f<r){
f++;
i=Q[f];
for (j = 1; j <= n; j++)
if((A[i][j]==1)&&(!visited[j])){
visit(j);
visited[j]=1;
r++;
Q[r]=j;
}
}
}
void printbfs(int i,int n){
int j,k;
for (k = 0; k <= n; k++) {
visited[k]=0;
}
bfs(i,n);
for(j=1;j<=n;i++){
if(!visited[j])
bfs(j,n);
j++;
}
}
void MenuList()
{
printf("\n\n\n**************************\n");
printf(" 1 ------- 生成图\n");
printf(" 2 ------- 深度优先\n");
printf(" 3 ------- 广度优先\n");
printf(" 0 ------- 退出\n");
printf("**************************\n");
}
int main()
{
int n, e, t, i;
int k=100;
MenuList();
while(k!=0)
{ printf("请选择操作:");
scanf("%d",&k);
if (k==1)
{ printf("请输入顶点数、边数、图的类型(输入格式:v,e,t):\n");
scanf("%d,%d,%d",&n,&e,&t);
creatadj(n,e,t);
}
if(k==2)
{ printf("input the first vex(点的编号):");
scanf("%d",&i);
printdfs(i,n);
}
if(k==3)
{ printf("input the first vex(点的编号):");
scanf("%d",&i);
printbfs(i,n);
}
}
return 0;
}
代码-图(邻接矩阵)
于 2022-08-15 19:12:01 首次发布