第十二周笔记

学习笔记

邻接矩阵算法



增加顶点

void insertVex(AdjMatrix *G,char e)//插入顶点 {  
  int i,j;
G->Vertex[G->vexnum++] = e;
 i=DNlocation(*G,e);
 j=DNlocation(*G,e);
  int m=i,n=j;
 for(j=0;j<G->vexnum;j++)
 {
    G->arcs[m][j].adj=INFNITY;
 }
 for(i=0;i<G->vexnum;i++)
 { 
    G->arcs[i][n].adj=INFNITY;
 } }

删除顶点

void deleteVex(AdjMatrix *G,char  vex)//删除顶点 {   
	int i,j;
    int location; 
			location= DNlocation(*G,vex);
     
	 		printf("顶点的下标是:%d\n",location); 
		
		//删除顶点集
		
		for ( i = location+1; i < G->vexnum; i++)
		{
			G->Vertex[i-1] = G->Vertex[i];
		}

		//vex下面的上移
		
		for (i = location+1; i < G->vexnum; i++)
		{
			for ( j = 0; j < G->vexnum; j++)
			{
				G->arcs[i-1][j] = G->arcs[i][j];
			}
		}
		
		//vex右边的左移

		for (i = location + 1; i < G->vexnum; i++)
		{
			for ( j = 0; j < G->vexnum; j++)
			{
				G->arcs[j][i-1] = G->arcs[j][i];
			}
		}
	
		//清理垃圾数据(第vexNum行 和 第vexNum列)
			
			int maxvexnum = G->vexnum;
		
				int weight = INFNITY;/*带权图,权重就是无穷*/
			//  int weight = 0;  /*不带权图,是 0 */
	/*
		for (i = 0; i < maxvexnum; i++)
		{
			G->arcs[maxvexnum-1][i].adj = weight; 
	
			G->arcs[i][maxvexnum-1].adj = weight;
		}
 			
			G->vexnum--;}

插入弧

int insertArc(AdjMatrix *G,char vex1,char vex2,int weight)//插入弧 {
  		//char v1,v2;
   
   	   //	v1=getch();
  
 		 	int I = DNlocation(*G,vex1);
  
   	//	v2=getch();
  
  			int II = DNlocation(*G,vex2);

  		printf("要插入的弧所在的矩阵位置是:\n");

  				printf("%d,%d\n",I,II);
  				 
				   G->arcs[I][II].adj = weight;
                    
  	//	int weight;
  
  /*		 if( (I!=II) && (I!=-1) && (II!=-1)) 
   	{  
      		printf("请输入权重:\n"); 
      
	  			scanf("%d",&weight);
	
	 
	   	return 1;
   }*/
   
  /*  	else if((I==II)&&((I!=-1)||(II!=-1)))
   { 
   	  	  G->arcs[I][II].adj = INFNITY ;
	  
	   	return 1;		   
   }
   
   		else if((I==-1)||(II==-1))*/
      
	  	return 0;
}

删除弧

int deleteArc(AdjMatrix *G)//删除弧 {
 	char v1,v2;
 
   	v1=getch();
  
  		int I = DNlocation(*G,v1);

   	v2=getch();
 
 		int II = DNlocation(*G,v2);
  
  	printf("删除的弧的位置是:%d,%d\n",I,II); 
		
		 if(I>-1 && I<G->vexnum && II>-1 && II<G->vexnum )
		{
			G->arcs[I][II].adj =INFNITY;
			return 1;
		}
		else
  return 0; }

小结

这周除了研究领接矩阵的算法外,还学习了邻接表的画法,邻接表和邻接矩阵的两种遍历方法,有广度遍历和深度遍历法,还有最小生成树的画法,以及连通图,强连通图的关系,区别,应用的公式等等,后续还会更新。

猜你喜欢

转载自www.cnblogs.com/lan-adress/p/12961174.html