图的存储


图的邻接矩阵存储,使用edges存储图中的边信息,二位数组的下标对应边的两个端点。point而用于存储节点信息。
public class MGraph {
    int edges[][] = new int[100][100]; //边
    int v,e;
    int[] point = new int[100]; //节点
    //邻接矩阵的遍历
    public void disp(){
    	for(int i = 0; i< e; i ++){
    		for(int j = 0; j < e; j ++){
    			System.out.print(edges[i][j]+" ");
    		}
    		System.out.println();
    		System.out.println();
    	}
    }
    public static void main(String[] argv){
    	MGraph g= new MGraph();
    	int[][] a = new int[][]{
    			{0,5,0,7,0,0},
    			{0,0,4,0,0,0},
    			{8,0,0,0,0,9},
    			{0,0,5,0,0,6},
    			{0,0,0,5,0,0},
    			{3,0,0,0,1,0}
    	};
    	g.e = 6;
        g.v = 10;
        for(int i = 0; i < g.e; i ++){
        	for(int j = 0; j < g.e; j ++){
        		g.edges[i][j] = a[i][j];
        	}
        }
        System.out.println("图G的邻接矩阵:");
        g.disp();
        ALGraph al = new ALGraph();
        al.MattoLIst(g);
        System.out.println("图G的连接表:");
        al.disp();
      //  al.DFS(0);
      //  al.DFS1(0);
        al.BFS(0);
    }
}

图的邻接表存储
<pre name="code" class="java">package Graph;
//图的邻接表存储
public class ALGraph {
   int[] visit = new int[20];//设置访问数组,将访问过的节点设置为1
   Vnode[] list = new Vnode[20];
   {
	   for(int i = 0; i < 20; i++){
		   list[i] = new Vnode();
	   }
   }
   int v,e;
   public void disp(){
	   for(int i = 0; i < e; i ++){
		  Anode node = list[i].next;
		  if(node != null)System.out.print(i+":  ");
		  while(node != null){
			  System.out.print(node.data+" ");
			  node = node.next;
		  }
		  System.out.println();
		  
	   }
   }
   //深度优先遍历,递归算法
   void DFS(int i){	
	  visit[i] = 1;
	  System.out.print(i + " ");
	  Anode node =  list[i].next;
	  while(node != null){
		  if(visit[node.data] == 0)
			  DFS(node.data);
		  node = node.next;
	  }
	  
   }
   //深度优先遍历,非递归算法
   void DFS1(int i){
	   for(int j = 0;j < e; j ++) visit[j] = 0;
	   Anode node = null;
	   Anode[] nodes = new Anode[20];
	   int top = -1;
	   System.out.print(i + " ");
	   visit[i] = 1;
	   top ++;
	   nodes[top] = list[i].next;
	   while(top > -1){
		   node = nodes[top];
		   top --;
		   while(node != null){
			   int w = node.data;
			   if(visit[w] == 0){
				   System.out.print(w + " ");
				   visit[w] = 1;
				   top ++;
				   nodes[top] = list[w].next;
				   break;
			   }
			   node = node.next;
		   }
	   }
	   
    }
   //广度优先遍历
   void BFS(int i){
	   Anode node = null;
	   int queue[] = new int[20];
	   int front = 0,rear = 0;
	   int[] visited = new int[20];
	   System.out.print(i + " ");
	   visited[i] = 1;
	   rear = (rear + 1) % 20;
	   queue[rear] = i;
	   while(front != rear){
		   front = (front + 1) % 20;
		   int data = queue[front];
		   node = list[data].next;
		   while(node != null){
			   if(visited[node.data] == 0) {
				   System.out.print(node.data + " ");
				   visited[node.data] = 1;
				   rear = (rear + 1) % 20;
				   queue[rear] = node.data;
			   }
			   node = node.next;
		   }
	   }
	   System.out.println();
   }
   //将连接矩阵转换为连接表
   public void MattoLIst(MGraph mg){
	   this.v = mg.v;
	   this.e = mg.e;
//	   for(int i = 0; i < e; i ++){
//		//   ag.list[i].next = new Anode();
//		   ag.list[i].next = null;
//	   }
	   for(int i = 0; i < e; i ++){
		   for(int j = e - 1; j >= 0 ; j--){
			   if(mg.edges[i][j] != 0){
				   Anode node= new Anode();
				   node.data =  j;
				   node.info = mg.edges[i][j];
				   node.next = list[i].next;
				   list[i].next = node;
			   }
		   }
	   }
	   
   }
}
class Vnode{
	int data;
	Anode next;
}
class Anode{
	int data;
	Anode next;
	int info;//quan zhi
}


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值