作成するための図でシンプルな

マップ

定義

タプル、G =(V、E)
V:頂点の有限集合
E:有限集合側関係
無向グラフ(エッジ)と有向グラフ(ARC)に

ここに画像を挿入説明

機能

データ構造との関係図のメッシュノードの一種類は任意であり、すなわち図は、おそらく任意の2つのノード間の直接的な相関関係であります

基本用語

頂点は:図の中のデータ要素の
エッジ/円弧:2つの頂点間の関係は、
完全に:有しN(N-1)/ 2を図の物品に縁なし
全く導か:N(N-1)エッジを有します有向グラフ
図稠密:図の多くの側面又はアークがあるが
疎:少しエッジを有するか、図アーク
G =(V、E)とGのための「=(V」、E:サブグラフ 「) V場合'VおよびEのサブセットである「Gと呼ばれ、EのサブセットであるGのサブグラフであります
右:図関連付けられたエッジ値
ネットワーク:図加重
隣接点は:G =(V、E)、存在する場合(X、Y)∈Eについて、隣接するXおよびYなしグラフが導か前記しました図に隣接するYにX前記
頂点の:辺の数に関連付けられている点が、描画への浸透度を有する
パス:Gで、Yはトップ、到達頂点の頂点リストからの経過xは頂点の配列(X、...、y)は、XからYへのパスであるであることを特徴とする
非重み付きグラフパス辺側及び右映像ショーの右上の数テープ経路:経路長
回路(ループ):最初の頂点最後の頂点と同じパス
通信:図中、そこにXからYへのパス、Xであり、Yが非連通と呼ばれている場合
との通信:任意の二つのXは、Yが間にある場合無向グラフG、頂点接続されて、接続グラフGがグラフであることを特徴とする
コンポーネントを接続:サブグラフなしの最大通信が
強いグラフ:図Xの頂点のうちのいずれか2つ、yは到達間それぞれ、図中のGは述べています。強連結グラフである
に向け大きな通信サブグラフ:強連結成分
ツリー:1のn-エッジ最小接続サブグラフ(非巡回グラフ)、N頂点

図のシンプルなメモリ構造。

配列表記(隣接行列)

①隣接マトリックス:マトリックスは、隣接する頂点間の関係を表す
エッジが存在する(X、Y)、即ち、AXY = 1(または重量)、またはAXYを= 0(または∞)
②の特性隣接行列
無向グラフの隣接マトリックス対称行列である
無向隣接行列の行は∞/ FIG /列の非ゼロのI i番目頂点の要素の数である
非ゼロ/∞i番目の行の隣接行列の要素の数と度、i番目度として
、例えば:
ここに画像を挿入説明
例:

//使用数组存储图
class SimpleMap{
 	//顶点个数
 	public int num;
 	//图
 	public int[][] map; 
}

public static final int MAX=100000;

 /**
  * 根据文件内容,生成一个无向图图
  * @param file  文件路径
  * @return 存储图数据的二阶数组
  */
 public static SimpleMap createMap(String file){
  	SimpleMap sMap = new SimpleMap();
  	BufferedReader bReader = null;
  	try {
   		bReader = new BufferedReader(new FileReader(file));
   		String data = bReader.readLine();
   		int number = Integer.parseInt(data);
		sMap.num = number;
		sMap.map = new int[number][number];
		 //初始化图
		for(int i=0; i<number; i++) {
	    		for(int j=0; j<number; j++) {
	     			sMap.map[i][j] = MAX;
	     			if(i == j) {
	      				sMap.map[i][j] = 0;
	     			}
	    		}  
	   	}
	   	//读取文件,初始化边
	   	while((data=bReader.readLine()) != null) {
	    		String[] value = data.split("&");
	    		int x = Integer.parseInt(value[0])-1;
	    		int y = Integer.parseInt(value[1])-1;
	    		int info = Integer.parseInt(value[2]);
	    		sMap.map[x][y] = info;
	    		sMap.map[y][x] = info;
	   	}
	  } catch (Exception e) {
	   	e.printStackTrace();
	  } finally {
	    	try {
	    		if(bReader != null) {
	     			bReader.close();
	     		}
	    	} catch (IOException e) {
	     		e.printStackTrace();
	    	}
	  }
	  return sMap;
}

スタイルファイルが格納されている:
ここに画像を挿入説明
最初の行為の頂点の数を、二次行列のサイズを決定する; ---- 2の後方、すなわち、1~6の重量と

隣接リスト(隣接リスト)

最初のノード:データ(頂点)、firstarc(ポインタフィールド)
表ノード:adjcex(データフィールド)、INFO(重量)、nextarc(標的ドメイン)
として:
ここに画像を挿入説明
例:

//使用静态链表存储图
//头结点
class HeadNode{
 	//结点入度
 	public int imNum;
 	//结点数据
 	public String data;
 	//结点输出
 	public MidNode nextIndex;
}
//表结点
class MidNode{
 	//数据
 	public String data;
 	//权值
 	public int info;
 	//下一位
 	public MidNode nextIndex;
}

/**
  * 使用静态链表构建一个有向图
  * @param file 文件输入
  * @return 生成的静态链表
  */
 public static HeadNode[] createDirectMap(String file) {
  	HeadNode[] mapHead = null;
  	BufferedReader bReader = null;
  	try {
   		bReader = new BufferedReader(new FileReader(file));
   		String data = bReader.readLine();
   		String[] value = data.split("&");
   		int number = Integer.parseInt(value[0]);
   		mapHead = new HeadNode[number];
   		//初始化静态链表头
   		for(int i=0; i<number; i++) {
    			mapHead[i] = new HeadNode();
    			mapHead[i].imNum = 0;
    			mapHead[i].data = value[1].substring(i, i+1);
    			mapHead[i].nextIndex = null;
   		}
   		//构建静态链表
   		while((data = bReader.readLine()) != null) {
    			value = data.split("&");
    			String fromData = value[0];
    			String toData = value[1];
    			int info = Integer.parseInt(value[2]);
    			for(int i=0; i<number; i++) {
     				//当该结点是出点时,新建结点
     				if(mapHead[i].data.equals(fromData)) {
      					MidNode mNode = new MidNode();
      					mNode.data = toData;
      					mNode.info = info;
      					//链接
      					mNode.nextIndex = mapHead[i].nextIndex;
      					mapHead[i].nextIndex = mNode;
    				 }else if(mapHead[i].data.equals(toData)) {
     					 //当该结点是入点时,入度加一
      					mapHead[i].imNum ++;
     				}
    			}
   		}
  	} catch (Exception e) {
   		e.printStackTrace();
  	} finally {
    		try {
    			if(bReader != null) {
     				bReader.close();
       			}
    		} catch (IOException e) {
     			e.printStackTrace();
    		}
   	}
  return mapHead;
 }

スタイルファイルが格納されている:
ここに画像を挿入説明
第一名&行動の頂点の頂点数、すなわちA-> B、1の重量の後ろ

公開された88元の記事 ウォンの賞賛2 ビュー1737

おすすめ

転載: blog.csdn.net/qq_41891805/article/details/105273174