国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

洛谷題單 -- 圖論的簡單入門

這篇具有很好參考價值的文章主要介紹了洛谷題單 -- 圖論的簡單入門。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

B3643 圖的存儲

鏈接 :?

圖的存儲 - 洛谷

思路 :?

這一題要考察圖的存儲方式 , 一般可以使用鄰接矩陣 或 鄰接表來存儲 圖的結(jié)點(diǎn) 和1 邊的信息 ,詳情請看代碼 :?

代碼

#include<bits/stdc++.h>
using namespace std;

const int N = 1010 ;
int n , m ;
int a[N][N] ; // 鄰接矩陣 
vector<int> b[N]; // 鄰接表 

// 鄰接矩陣的輸出 
void pa(){
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout << a[i][j] << " ";
		}
		cout << endl ;
	}
}

// 鄰接表的輸出 
void pb(){
	for(int i=1;i<=n;i++){
		int d = b[i].size();
		cout << d << " ";
		sort(b[i].begin(),b[i].end());
		for(int j=0;j<d;j++){
			cout << b[i][j] << " ";
		}
		cout << endl ;
	}
}

int main(){
	cin >> n >> m;
	for(int i=0;i<m;i++){
		int x , y ; cin >> x >> y ;
		a[x][y] = 1 ; a[y][x] = 1 ; // 鄰接矩陣
		b[x].push_back(y) ; b[y].push_back(x) ; // 鄰接表 
	}
	pa();
	pb();
	return 0 ;
}

P5318 【深基18.例3】查找文獻(xiàn)

鏈接?

【深基18.例3】查找文獻(xiàn) - 洛谷

思路 :?

這題考察有向圖的 dfs 和 bfs ,詳情請看代碼,如果用鄰接矩陣的話一定會mle,只能夠使用鄰接表,我這里采用的是用vector數(shù)組實現(xiàn)的鄰接表,詳情請看代碼 :?

代碼?

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10 ;
typedef long long LL ;

int n , m , x , y;
bool b[N] ; // 狀態(tài)記錄數(shù)組 
vector<int> a[N] ; // 鄰接表 
queue<int> q;

inline int read(){//二進(jìn)制優(yōu)化的快讀 
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    }
    return x*f;
}

// x指當(dāng)前遍歷到的結(jié)點(diǎn),r表示已遍歷過的結(jié)點(diǎn) 
void dfs(int x , int r){ 
	b[x] = true ;
	cout << x << " " ; // 輸出
	if(r == n) return ;
	for(int i=0;i<a[x].size();i++){
		if(!b[a[x][i]])
			dfs(a[x][i],r+1);
	}
}

void bfs(int x){
	memset(b , false , sizeof(b)) ; // 清空bool數(shù)組
	b[x] = true ;
	q.push(x) ;
	while(!q.empty()){ // 還有沒有沒訪問的 
		int v = q.front();
		q.pop() ; // 彈出隊頭 , 否則會一直在第一層遍歷
		cout << v << " " ;
		for(int i=0;i<a[v].size();i++){
			if(!b[a[v][i]]){
				b[a[v][i]] = true ;
				q.push(a[v][i]);
			}
		} 
	}
}

int main(){
	// n = read() ; m = read() ;
	cin >> n >> m ;
	for(int i=1;i<=m;i++){
		x = read() ; y = read() ; 
		// cin >> x >> y ; 
		a[x].push_back(y);
	}
	for(int i=1;i<=n;i++) sort(a[i].begin(),a[i].end()); // 將每條路通向的點(diǎn)從小到大排序 
	dfs(1,0) ; // 深搜 
	puts("");
	for(int i=1;i<=n;i++) b[i] = false ;
	bfs(1) ; // 寬搜  
	puts("") ;
	return 0;
}

B3644 【模板】拓?fù)渑判?/ 家譜樹

鏈接 :

?https://www.luogu.com.cn/problem/B3644

洛谷題單 -- 圖論的簡單入門,算法模板學(xué)習(xí) &amp;&amp; 洛谷,算法學(xué)習(xí),圖論,算法

思路 :?

給出案例畫圖如下 :?

洛谷題單 -- 圖論的簡單入門,算法模板學(xué)習(xí) &amp;&amp; 洛谷,算法學(xué)習(xí),圖論,算法

拓?fù)渑判?模板題)

代碼 :?

#include<bits/stdc++.h>
using namespace std;

const int N = 102 ;

vector<int> a[N] ;
int tp[N] ; // 存放拓?fù)湫蛄?
int  d[N] ; // 存放每個結(jié)點(diǎn)的入度 
int n , x ;

bool toposort() {
	queue<int> q;
	int tt = 0 ;

	for(int i = 1; i <= n; i++) {
		if(d[i] == 0) {
			q.push(i); // 將入度為 0 的點(diǎn)全放進(jìn)來 
		}
	}
	
	while(!q.empty()) {
		int u = q.front() ; q.pop();
		tp[++tt] = u ;
		for(auto v : a[u]) {
			d[v] -- ;
			if(d[v] == 0){
				q.push(v);
			}
		}
	}
	return tt == n;	
}

int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		while(cin >> x){
			if(x == 0) break;
			a[i].push_back(x);
			d[x] ++;
		}
	}	
	
	if(toposort()) {
		for(int i=1;i<=n;i++){
			cout << tp[i] << " ";
		}
		cout << endl ;
	}
	else{
		return 0;
	}
	return 0 ;
}

或者說這樣 :?

#include<bits/stdc++.h>
using namespace std;

const int N = 102 ;

vector<int> a[N] ;
int  d[N] ; // 存放每個結(jié)點(diǎn)的入度 
int n , x ;

bool toposort() {
	queue<int> q;
	vector<int> res;
	
	for(int i = 1; i <= n; i++) {
		if(d[i] == 0) {
			q.push(i); // 將入度為 0 的點(diǎn)全放進(jìn)來 
		}
	}
	
	while(!q.empty()) {
		int u = q.front() ; q.pop();
		res.push_back(u);
		for(auto v : a[u]) {
			d[v] -- ;
			if(d[v] == 0){
				q.push(v);
			}
		}
	}
	if(res.size()==n) {
		for(auto x : res) cout << x << " ";
		return true;
	}else {
		return false;
	}
}

int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		while(cin >> x){
			if(x == 0) break;
			a[i].push_back(x);
			d[x] ++;
		}
	}	
	
	if(toposort()) {
		return 0 ;
	}
	return 0 ;
}

P3916 圖的遍歷

鏈接 :?

圖的遍歷 - 洛谷

思路 :?

反向建邊 + dfs :?文章來源地址http://www.zghlxwxcb.cn/news/detail-850290.html

代碼 :?

#include<bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10 ;
vector<int> g[N] ;
int n , m ;
int ans[N] ;
// 反向建圖 + dfs
// 考慮較大的點(diǎn)能夠法相到達(dá)那一些點(diǎn) 

void dfs(int i , int b){
	if(ans[i]) return  ;
	ans[i] = b ;
	for(int j=0;j<g[i].size();j++){
		dfs(g[i][j] , b) ;
	}
}

int main(){
	cin >> n >> m ;
	for(int i=0;i<m;i++){
		int x , y ; cin >> x >> y ;
		 g[y].push_back(x) ; // 反向建邊 
	}
	for(int i=n;i;i--) dfs(i,i) ; // 對i進(jìn)行dfs 
	for(int i=1;i<=n;i++){
		cout << ans[i] << " " ;
//		if(ans[i]) cout << ans[i] << endl ;
//		else cout << i << endl ;
	}  
	return 0;
}

到了這里,關(guān)于洛谷題單 -- 圖論的簡單入門的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 洛谷題單 Part 8.2 最短路問題

    最短路算法一般在算法競賽中有四種比較常見, F l o y d Floyd Fl oy d 算法, B e l l m a n ? F o r d Bellman-Ford B e ll man ? F or d 算法, D i j k s t r a Dijkstra D ijk s t r a 算法, S P F A SPFA SPF A 算法。 F l o y d Floyd Fl oy d 算法和 B e l l m a n ? F o r d Bellman-Ford B e ll man ? F or d 算法的時間復(fù)雜

    2024年02月09日
    瀏覽(21)
  • 洛谷-官方題單版【入門篇】

    題目背景 本題是洛谷的試機(jī)題目,可以幫助了解洛谷的使用。 建議完成本題目后繼續(xù)嘗試 P1001、P1008。 另外強(qiáng)烈推薦新用戶必讀貼 題目描述 超級瑪麗是一個非常經(jīng)典的游戲。請你用字符畫的形式輸出超級瑪麗中的一個場景。 題目描述 輸入一個小寫字母,輸出其對應(yīng)的大寫

    2024年02月02日
    瀏覽(30)
  • 簡單圖論的知識

    Floyd算法是一種求解多源最短路問題的算法。 在floyd中,圖一般用鄰接矩陣存儲,邊權(quán)可正可負(fù),利用動態(tài)規(guī)劃思想,逐步求解出任意兩點(diǎn)之間的最短距離。 我們需要準(zhǔn)備一個數(shù)組d[N][N][N],初始化無窮。 d[k][i][j]表示路徑(除去起點(diǎn)和終點(diǎn))中編號最大的點(diǎn)編號=k的情況下,點(diǎn)

    2024年04月13日
    瀏覽(20)
  • 算法題目題單+題解——圖論

    本文為自己做的一部分圖論題目,作為題單列出,持續(xù)更新。 題單由題目鏈接和題解兩部分組成,題解部分提供簡潔題意,代碼倉庫:Kaiser-Yang/OJProblems。 對于同一個一級標(biāo)題下的題目,題目難度盡可能做到遞增。 題目鏈接:Luogu P3547 [POI2013] CEN-Price List 題解: 題目鏈接:

    2024年02月19日
    瀏覽(21)
  • 聚類算法與圖論的結(jié)合:社交網(wǎng)絡(luò)中的社群發(fā)現(xiàn)

    社交網(wǎng)絡(luò)是現(xiàn)代互聯(lián)網(wǎng)的重要組成部分,它們?yōu)槿藗兲峁┝艘环N高效的溝通和交流方式。社交網(wǎng)絡(luò)中的社群發(fā)現(xiàn)是一種常見的數(shù)據(jù)挖掘任務(wù),它旨在識別網(wǎng)絡(luò)中的社群結(jié)構(gòu),以便更好地理解網(wǎng)絡(luò)中的信息傳播和社交行為。 社群發(fā)現(xiàn)是一種無監(jiān)督的學(xué)習(xí)方法,它通過對網(wǎng)絡(luò)中的

    2024年04月24日
    瀏覽(20)
  • 【算法入門&圖論】【模板】拓?fù)渑判騶【模板】單源最短路2 |最小生成樹

    【算法入門&圖論】【模板】拓?fù)渑判騶【模板】單源最短路2 |最小生成樹

    ?作者簡介:熱愛后端語言的大學(xué)生,CSDN內(nèi)容合伙人 ?精品專欄:C++面向?qū)ο???系列專欄:算法百煉成神 本專欄收錄的均為??途W(wǎng)的算法題目,內(nèi)含鏈表、雙指針、遞歸、動態(tài)規(guī)劃、基本數(shù)據(jù)結(jié)構(gòu)等算法思想的具體運(yùn)用。??途W(wǎng)不僅有大量的經(jīng)典算法題目,也有大廠的面

    2024年02月03日
    瀏覽(64)
  • C語言,洛谷題,壓縮技術(shù)2.0

    C語言,洛谷題,壓縮技術(shù)2.0

    題目如下: ?這題用C語言實現(xiàn)有一些難度,要用到一個庫函數(shù),strcat(頭文件是string.h),用于連接兩個字符串?dāng)?shù)組,strcat(str,arr)就是將arr字符數(shù)組后面的\\0清除,再將arr字符拼接到str上。 題目指出,輸入的是一個n*n大小的輸入數(shù)據(jù),可以先打印第一行后,計算第一行后,計

    2024年02月07日
    瀏覽(18)
  • 【題單】一個動態(tài)更新的洛谷綜合題單

    洛谷試煉場的題目確實很具有代表性,但是近幾年以來,又有許多經(jīng)典題目出現(xiàn)在 OI 界中,這個大題單就是作為洛谷試煉場的擴(kuò)展和補(bǔ)充。 目錄 新版本食用指南 更新日志 題單 Part 0 試機(jī)題 Part 1 入門階段 Part 2 基礎(chǔ)算法 Part 3 搜索 Part 4 動態(tài)規(guī)劃 Part 4.1-4.4 動態(tài)規(guī)劃 Part 4.5-

    2024年02月19日
    瀏覽(42)
  • 圖論的基本知識

    圖論的基本知識

    1.數(shù)據(jù)結(jié)構(gòu) 圖論是數(shù)學(xué)的一個分支,研究圖(Graph)的結(jié)構(gòu)、性質(zhì)以及它們之間的關(guān)系。圖是由節(jié)點(diǎn)(或頂點(diǎn))和邊組成的一種數(shù)據(jù)結(jié)構(gòu),用于表示對象之間的關(guān)系。以下是一些圖論的基本概念: 圖(Graph): 圖由節(jié)點(diǎn)(頂點(diǎn))和連接節(jié)點(diǎn)的邊組成。圖可以分為有向圖和無向

    2024年02月04日
    瀏覽(28)
  • PTA圖論的搜索題

    PTA圖論的搜索題

    目錄 7-1 列出連通集 題目 輸入格式: 輸出格式: 輸入樣例: 輸出樣例: AC代碼 7-2 六度空間 題目 輸入格式: 輸出格式: 輸入樣例: 輸出樣例: 思路 AC代碼 7-3 地下迷宮探索 題目 輸入格式: 輸出格式: 輸入樣例1: 輸出樣例1: 輸入樣例2: 輸出樣例2: 思路 AC代碼 7-4 社交網(wǎng)絡(luò)圖中結(jié)點(diǎn)的“

    2024年04月23日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包