1. 程式人生 > >有向圖鄰接矩陣

有向圖鄰接矩陣

這裡寫圖片描述

圖:是一種線性結構,由n個點和m條邊組成,任意兩個點之間可以用連線連線.

#include <stdio.h>
#include <stdlib.h>
#define  MAX_VALUE 8888 //初始化陣列的預設值,相當於無限大
#define  MAX_POINT_NUM 10  //最大頂點數
typedef int  matrix[MAX_POINT_NUM][MAX_POINT_NUM];

//定義有向圖的鄰接矩陣的結構體
typedef struct 
{
    int vertex[MAX_POINT_NUM];//儲存頂點的陣列
    matrix vertex_matrix;//二維陣列
int vertex_num;//頂點數 int arc_num;//邊數 }digraph; int locatevertex(digraph * graph,int v) { int i; for(i=0;i<graph->vertex_num;i++) { if(graph->vertex[i]==v) { return i; } } return -1; } void init_digraph(digraph * graph) { printf
("please input vertex and arc:\n");//輸入頂點和邊數 scanf("%d%d",&(graph->vertex_num),&(graph->arc_num)); int i; printf("please input vertex point value:\n");//輸入頂點的編號 for(i=0;i<graph->vertex_num;i++) { scanf("%d",&graph->vertex[i]); } int j; i=0
; for(i=0;i<graph->vertex_num;i++) { for(j=0;j<graph->vertex_num;j++) { graph->vertex_matrix[i][j]=MAX_VALUE;//統一初始化存放頂點間權重值 } } int v1,v2; int weight; printf("please input between arc two point and weight:\n"); //輸入兩個頂點及他們之間的權重值 int k; for(k=0;k<graph->arc_num;k++) { scanf("%d%d%d",&v1,&v2,&weight); i=locatevertex(graph,v1); j=locatevertex(graph,v2); graph->vertex_matrix[i][j]=weight; } } //列印有向圖的鄰接矩陣 void print_digraph(digraph * graph) { int i,j; for(i=0;i<graph->vertex_num;i++) { for(j=0;j<graph->vertex_num;j++) { if(graph->vertex_matrix[i][j]==MAX_VALUE) { printf("N\t"); } else { printf("%d\t",graph->vertex_matrix[i][j]); } } printf("\n"); } } int main(int argc,const char *argv[]) { digraph graph; init_digraph(&graph); print_digraph(&graph); return 0; }

執行結果:
這裡寫圖片描述

相關推薦

Luogu 3758 [TJOI2017]可樂(鄰接矩陣冪的意義 矩陣快速冪)

urn font 出了 family 意義 strong 答案 題目 str 題目描述 加裏敦星球的人們特別喜歡喝可樂。因而,他們的敵對星球研發出了一個可樂機器人,並且放在了加裏敦星球的1號城市上。這個可樂機器人有三種行為: 停在原地,去下一個相鄰的城市,自爆。它每一秒都

鄰接矩陣深度優先搜尋

上一個文章是寫的無向圖和鄰接連結串列的廣度搜索,深度搜索就用矩陣和有向圖了。 矩陣處理起來還是會比連結串列簡單一些。 先分析資料結構: 1.儲存所有結點的集合用到了一個單向迴圈連結串列,為什麼要用迴圈連結串列呢,因為在儲存結點資料的時候是按照輸入資料的順序來儲存的,如果是用一個數組或者單

鄰接矩陣

圖:是一種線性結構,由n個點和m條邊組成,任意兩個點之間可以用連線連線. #include <stdio.h> #include <stdlib.h> #define MAX_VALUE 8888 //初始化陣列的預設值,相當

演算法與資料結構基礎9:C++實現——鄰接矩陣儲存

鄰接矩陣的儲存比鄰接表實現起來更加方便,也更加容易理解。 鄰接矩陣就是用一個二維陣列matrix來儲存每兩個點的關係。如果兩個點m,n之間有邊,將陣列matrix[]m[m]設為1,否則設為0。 如果有權,則將matrix[m]n[]設為權值,定義一個很大或者很小的數(只要

實驗四(建,無+鄰接矩陣(BFS,DFS(遞迴+非遞迴)),+鄰接表(BFS,DFS(遞迴+非遞迴)),拓撲排序)

//Sinhaeng Hhjian #include<bits/stdc++.h> using namespace std; const int N=100; const int MAX=1000; int book[N], cnt; struct node{

和無鄰接矩陣的輸入輸出,深度深度優先搜尋,廣度優先搜尋

#include<iostream> #include<stdlib.h> #include<malloc.h> #include<queue> #define MAXLEN 100 using namespace std; t

資料結構與演算法——鄰接表輸出其拓撲排序序列

  測試資料 輸入: 12 16 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c1 c4 c1 c2 c1 c3 c1 c12 c4 c5 c2 c3 c3 c5 c3 c7 c5 c7 c3 c8 c9 c12 c9 c10 c10 c12 c

矩陣對稱化(附加:如何把用空格分隔的文字貼上到Excel表格的各列中)

原始資料在in.txt中,如下: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 1 1 0 0 1 0 0 0 0

leetcode 207 課程表 鄰接表 判斷是否

class Solution { struct GraphNode{ int label; vector<GraphNode*>neighbors; GraphNode(int x):label(x) {};

-鄰接矩陣-寬度優先遍歷-BFS C程式碼實現

一、BFS演算法思路本演算法以無向圖為例,儲存方式採用鄰接矩陣1)將該網以鄰接矩陣的方式儲存,由於這裡的示例採用無向圖,因此它是一個對稱陣2)選取A點為起始點,訪問此頂點,用一個visit的bool型陣列記錄訪問狀態(false表示未被訪問,true表示已訪問)3)從A的未被

鄰接表求入度,出度,刪除、增加頂點,弧,深度遍歷及其生成樹等

#include "stdio.h"#include "math.h"#include"malloc.h"#include "stack"#include <queue>#define OK 1#define ERROR -1#define MAX 32764 /

---鄰接表(BFS+DFS)

    #include <stdio.h> #include <malloc.h> #define true 1 #define false 0 #define INFINITY 1000000 #define MaxVertexNum 100 #

演算法與資料結構基礎8:C++實現——鄰接表儲存

前面實現了連結串列和樹,現在看看圖。 連結串列是一對一的對應關係; 樹是一對多的對應關係; 圖是多對多的對應關係。 圖一般有兩種儲存方式,鄰接表和鄰接矩陣。 先看鄰接表。 鄰接表就是將圖中所有的點用一個數組儲存起來,並將此作為一個連結串列的頭, 連結串列中儲存跟這個點相鄰的

C語言利用鄰接矩陣的儲存方式實現和無的深度優先搜尋(DFS)

C語言利用圖的鄰接矩陣的儲存方式實現有向圖和無向圖的深度優先搜尋(DFS) Description 圖採用鄰接矩陣儲存,圖中頂點數為n(0<n<20),頂點資訊為整數,依次為0,1,..,n-1。 編寫函式,輸入圖的型別,0:無向圖,1:有向圖;輸入圖的頂點數、邊數、邊的偶對

C語言利用鄰接矩陣的儲存方式實現和無的廣度優先搜尋(BFS)

#include <stdio.h> #include <stdlib.h> #define Max_Vetex_Num 100 #define MAXSIZE 20 #define STACK_SIZE 30 typedef struct { int vexs[M

鄰接矩陣

轉自:http://www.cnblogs.com/skywang12345/ 鄰接矩陣有向圖的介紹 鄰接矩陣有向圖是指通過鄰接矩陣表示的有向圖。 上面的圖G2包含了"A,B,C,D,E,F,G"共7個頂點,而且包含了"<A,B>,<B,C>,<B,E>,<

9、【資料結構】鄰接矩陣鄰接

一、鄰接矩陣有向圖 1、基本定義 #define MAX 10 class MatrixDG { private: char mVexs[MAX]; // 頂點集合 int mVexNum; // 頂點數

鄰接矩陣(一)之 C語言詳解

/* * 建立圖(自己輸入) */ Graph* create_graph() { char c1, c2; int v, e; int i, p1, p2; Graph* pG; // 輸入"頂點數"和"邊數" printf("

鄰接矩陣(二)之 C++詳解

/* * 建立圖(自己輸入資料) */ MatrixDG::MatrixDG() { char c1, c2; int i, p1, p2; // 輸入"頂點數"和"邊數" cout << "input vertex number: "

鄰接矩陣(三)之 Java詳解

/* * 建立圖(自己輸入資料) */ public MatrixDG() { // 輸入"頂點數"和"邊數" System.out.printf("input vertex number: "); int vlen = readInt(); Sys