C++ 邻接矩阵(代码)

C++邻接矩阵代码,见下:

cpp 复制代码
#include<iostream>

using namespace std;

#define inf -1
class Graph{
private:
	int vertices;
	int **edges;
	
public:
	Graph(int vertices);
	~Graph();
	void addEdge(int u, int v, int w);
	void printGraph();
};

Graph::Graph(int vertices){
	this->vertices = vertices;
	edges = new int* [vertices];
	for(int i=0; i<vertices; ++i){
		edges[i] = new int[vertices];
		for(int j=0; j<vertices; ++j){
			edges[i][j] = inf;
		}
	}
}

Graph::~Graph(){
	for(int i=0; i<vertices; ++i){
		delete[] edges[i];
	}
	delete[] edges;
}

void Graph::addEdge(int u, int v, int w){
	edges[u][v] = w;
}

void Graph::printGraph(){
	for(int i=0; i<vertices; ++i){
		for(int j=0; j<vertices; ++j){
			cout << edges[i][j] << " ";
		}
		cout << endl;
	}
}

int main(){
	int vertices = 5;
	Graph graph(vertices);
	
	graph.addEdge(0, 1, 1);
	graph.addEdge(0, 2, 3);
	graph.addEdge(1, 2, 2);
	graph.addEdge(2, 3, 7);
	graph.addEdge(3, 4, 9);
	graph.addEdge(4, 0, 4);
	graph.addEdge(4, 2, 5);
	
	graph.printGraph();
	return 0;
	
}

代码一,对应力扣,传递信息,代码见下

cpp 复制代码
class Solution {
    int matrix[10][10];
    int N;

    int dfs(int u, int k){
        if(k == 0){
            if(u == N-1){
                return 1;
            }
            return 0;
        }
        int sum = 0;
        for(int i=0; i<N; ++i){
            if(matrix[u][i]){
                sum += dfs(i, k-1);
            }
        }
        return sum;
    }

public:
    int numWays(int n, vector<vector<int>>& relation, int k) {
        N = n;
        memset(matrix, 0, sizeof(matrix));
        for(int i=0; i<relation.size(); ++i){
            int a = relation[i][0];
            int b = relation[i][1];
            matrix[a][b] = 1;
        }
        return dfs(0, k);
    }
};

代码二,对应力扣 省份数量,代码见下:

cpp 复制代码
class Solution {
    bool color[201];
    int count;
    int n;
    void dfs(vector<vector<int>>& isConnected, int u){
        if(color[u]){
            return;
        }
        color[u] = true;
        for(int i=0; i<n; ++i){
            if(isConnected[u][i]){
                dfs(isConnected, i);
            }
        }

    }
public:
    int findCircleNum(vector<vector<int>>& isConnected) {
        n = isConnected.size();
        count = 0;
        memset(color, false, sizeof(color));
        for(int i=0; i<n; ++i){
            if(color[i] == false){
                dfs(isConnected, i);
                ++count;
            }
        }
        return count;
    }
};
相关推荐
ajassi20002 小时前
开源 C++ QT Widget 开发(十五)多媒体--音频播放
linux·c++·qt·开源
焦耳加热3 小时前
阿德莱德大学Nat. Commun.:盐模板策略实现废弃塑料到单原子催化剂的高值转化,推动环境与能源催化应用
人工智能·算法·机器学习·能源·材料工程
wan5555cn3 小时前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
u6063 小时前
常用排序算法核心知识点梳理
算法·排序
鹅毛在路上了5 小时前
C++, ffmpeg, libavcodec-RTSP拉流,opencv实时预览
c++·opencv·ffmpeg
John_ToDebug5 小时前
定制 ResourceBundle 的实现与 DuiLib 思想在 Chromium 架构下的应用解析
c++·chrome·ui
蒋星熠6 小时前
Flutter跨平台工程实践与原理透视:从渲染引擎到高质产物
开发语言·python·算法·flutter·设计模式·性能优化·硬件工程
小欣加油6 小时前
leetcode 面试题01.02判定是否互为字符重排
数据结构·c++·算法·leetcode·职场和发展
3Cloudream6 小时前
LeetCode 003. 无重复字符的最长子串 - 滑动窗口与哈希表详解
算法·leetcode·字符串·双指针·滑动窗口·哈希表·中等
王璐WL6 小时前
【c++】c++第一课:命名空间
数据结构·c++·算法