C 언어 구현 그림 의 인접 행렬 저장 작업

3267 단어 C 언어인접 행렬
인접 행렬 을 이용 하면 임의의 두 정점 사이 에 변(또는 호)이 연결 되 어 있 는 지 여 부 를 쉽게 판단 하고 각 정점 의 도 를 구하 기 쉽다.
c 언어 코드 는 다음 과 같다.

#include<stdio.h>
#include<stdlib.h>
#define MAX_VER_NUM 50
typedef char VertexType;
typedef enum
{
 DG,UDG
}GraphType;
typedef struct
{
 VertexType vexs[MAX_VER_NUM]; //    
 int arcs[MAX_VER_NUM][MAX_VER_NUM]; //    
 int vexnum,arcnum;   //          
 GraphType type;   //      
}MGraph; 
 
//                   
//vex   
//return     ,     ,  ,  0
int getIndexOfVexs(char vex,MGraph *MG)
{
 int i;
 for(i=1;i<=MG->vexnum;i++)
 {
 if(MG->vexs[i]==vex)
 {
 return i;
 }
 }
 return 0;
}
 
//      
void create_MG(MGraph *MG)
{
 int i,j,k;
 int v1,v2,type;
 char c1,c2;
 printf("Please input graph type DG(0) or UDG(1):");
 scanf("%d",&type);
 if(type==0)
 {
 MG->type=DG;
 }
 else if(type==1)
 {
 MG->type=UDG;
 }
 else
 {
 printf("Please input correct graph type DG(0) or UDG(1)!");
 return;
 }
 printf("Please input vexnum:");
 scanf("%d",&MG->vexnum);
 printf("Please input arcnum:");
 scanf("%d",&MG->arcnum);
 getchar();
 for(i=1;i<=MG->vexnum;i++)
 {
 printf("Please input %dth vex(char):",i);
 scanf("%c",&MG->vexs[i]);
 getchar();
 }
 //       
 for(i=1;i<=MG->vexnum;i++)
 {
 for (j=1;j<=MG->vexnum;j++)
 {
 MG->arcs[i][j]=0;
 }
 }
 //      ,      
 for(k=1;k<=MG->arcnum;k++)
 {
 printf("Please input %dth arc v1(char) v2(char):",k);
 scanf("%c %c",&c1,&c2);
 v1=getIndexOfVexs(c1,MG);
 v2=getIndexOfVexs(c2,MG);
 if(MG->type==-1)
 {
 MG->arcs[v1][v2]=MG->arcs[v2][v1]=1;
 }
 else
 {
 MG->arcs[v1][v2]=1;
 }
 getchar();
 }
}
 
//           
void print_MG(MGraph MG)
{
 int i,j;
 if(MG.type==DG)
 {
 printf("Graph type: Direct graph
"); } else { printf("Graph type: Undirect graph
"); } printf("Graph vertex number: %d
",MG.vexnum); printf("Graph arc number: %d
",MG.arcnum); printf("Vertex set:"); for(i=1;i<=MG.vexnum;i++) { printf("%c",MG.vexs[i]); } printf("
Adjacency Matrix:
"); for(i=1;i<=MG.vexnum;i++) { for(j=1;j<=MG.vexnum;j++) { printf("%d",MG.arcs[i][j]); } printf("
"); } } // int main(void) { MGraph MG; create_MG(&MG); print_MG(MG); return 0; }
얻 은 결 과 는 다음 그림 과 같다.

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기