[鄰接表] 學習鄰接表的表示方法+BFS

算法導論上面的偽代碼實現哦,沒啥技術,不過這個鄰接表表示法(figo大神教的)很nice。

簡單說一下,head里面是放著自己節點后面鏈的最后一個元素在邊池中的位置,邊池里面成一個一個鏈狀,像并查集,但是沒有路徑壓縮,邊池為next通過for(int i=head[v];i!=-1;i=next[i])就能找到屬于v節點的所以邊,對應next下標里面存放著,dest[i]為和v構成邊的節點,dist里面存放著距離,這里是沒有邊權的圖,所以默認為1,主要看代碼,給力。

?

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<string>
#include<bitset>
#include<queue>
#include<vector>
#include<string>
#include<cmath>
#include<map>
#define rep(i,n,m) for(int i=(n);i<=(m);++i)
#define re1(i,n) rep(i,1,n)
#define re0(i,n) rep(i,0,n)
#define RE(a) ((a)*(a))
#define SIZE(a) (int((a).size()))
#define vi vector<int>
#define vl vector<ll>
#define vs vector<string>
#define qi queue<int>
#define ql queue<ll>
#define qs queue<string>
//count distance 不能用哦,已經定義了。
using namespace std;
typedef long long ll;
template<class T>
void inline maxi(T a,T b){a=max(a,b);
}
template<class T>
void inline mini(T a,T b){a=min(a,b);
}
template<class T>
void show(T &a,int n,int m){rep(i,n,m){cout<<setw(6)<<a[i];}cout<<endl;
}
template<class T>
void show(T *a[10],int n,int m){re0(i,n){re0(j,m)cout<<a[i]<<' ';cout<<endl;}
}
const int maxnum=8+1;
const int maxint=2147483647;
//graph
int head[maxnum];
vi next,dist,dest;
void add_direct(int from,int to,int dis=1){next.push_back(head[from]);head[from]=SIZE(next)-1;dist.push_back(dis);dest.push_back(to);
}
void add_nodirect(int from,int to,int dis=1){add_direct(from,to,dis);add_direct(to,from,dis);
}
void init(){next.clear();dist.clear();dest.clear();re0(u,maxnum-1)head[u]=-1;add_nodirect(1,3);add_nodirect(1,2);add_nodirect(4,3);add_nodirect(4,5);add_nodirect(4,6);add_nodirect(5,6);add_nodirect(5,7);add_nodirect(6,7);add_nodirect(6,8);add_nodirect(8,7);
//	show(head,1,8);
//	show(next,0,SIZE(next)-1);
//	show(dest,0,SIZE(next)-1);
}
int path[maxnum];
void bfs(int s){qi Q;bool vis[maxnum];re0(u,maxnum-1){vis[u]=false;path[u]=-1;}vis[s]=true;Q.push(s);while(!Q.empty()){int u=Q.front();Q.pop();for(int i=head[u];i!=-1;i=next[i]){int v = dest[i];if(vis[v])continue;Q.push(v);vis[v]=1;path[v]=u;}}
}
void print_path(int from,int to){if(to==from){cout<<from<<endl;}else if(path[to]==-1){cout<<"no way"<<endl;}else{print_path(from,path[to]);cout<<to<<endl;}
}
//#define codeforces CODEFORCES
int main(){
#ifdef codeforcesfreopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
#endifinit();bfs(3);print_path(4,7);
}

  

轉載于:https://www.cnblogs.com/gggin/archive/2012/12/25/2832436.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260127.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260127.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260127.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

wordpress漏洞_WordPress XSS漏洞可能導致遠程執行代碼(RCE)

原作者&#xff1a; Ziyahan Albeniz在2019年3月13日&#xff0c;專注于靜態代碼分析軟件的RIPS科技公司發布了他們在所有版本的WordPress 5.1.1中發現的跨站點腳本(XSS)漏洞的詳細信息。該漏洞已在不同類別的各種網站上公布。有些人將其歸類為跨站點請求偽造(CSRF)漏洞&#x…

centOS 6環境下安裝R-3.3.2及Rstudio-server

【編譯R語言】 1、下載安裝R語言 # 下載R-3.3.2 $ wget https://cran.r-project.org/src/base/R-3/R-3.3.2.tar.gz# 安裝R-3.3.2 $ tar -zxvf R-3.3.2.tar.gz $ cd R-3.3.2# 安裝到默認目錄下 --perfix/opt/R 或 /usr/local/lib64/R $ ./configure --prefix/opt/R --with-re…

DJ輪回舞曲網下載教程

該網站網址為&#xff1a;http://www.92cc.com/ 昨天有網友問我這個網站能不能下載。我告訴他&#xff0c;只要能在線試聽的就能下載 于是今天出個臨時教程 教大家如何獲取試聽的音樂URL。 第一步找到試聽的網址&#xff0c;如&#xff1a; http://www.92cc.com/p97206.html 第…

【DP】【Asia - Harbin - 2010/2011】【Permutation Counting】

【題目描述】Given a permutation a1, a2,...aN of {1, 2,..., N}, we define its E-value as the amount of elements where ai > i. For example, the E-value of permutation {1, 3, 2, 4} is 1, while the E-value of {4, 3, 2, 1} is 2. You are requested to find h…

三豐三坐標編程基本步驟_三豐三坐標CRYSTA APEX S776

日本三豐MITUTOYO從1934年成立至今&#xff0c;專力致于精密測量儀器的研發和生產&#xff0c;在七十多年中&#xff0c;日本三豐量具MITUTOYO已成為世界最大綜合測量儀器的制造商&#xff0c;它生產的產品包括千分尺&#xff0c;卡尺&#xff0c;千分表&#xff0c;高度尺&…

oracle的文件后綴名,轉:數據文件的擴展名是ora,dbf,dat的,有什么區別?

只是通過擴展名來標識文件的類型而已&#xff0c;對于數據文件不管是ora/dat/dbf&#xff0c;都是一樣的&#xff0c;沒有什么區別。.dbf-數據文件&#xff0c; .tmp-臨時文件&#xff0c;.log-重作日志文件(redo log file)&#xff0c; .ctl-控制文件.ora-參數文件&#xff0c…

Unity3D研究院之Android同步方法讀取streamingAssets

版本Unity5.3.3 Android 小米pad1 首先非常感謝 守著陽光 同學在下面的留言。讓我解決了一個大的謎團。。 開始我知道 StreamingAssets 路徑是這個 path “jar:file://” Application.dataPath “!/assets/”; 文檔在這里&#xff1a; http://docs.unity3d.com/Manual/Strea…

Codeforces Round 261 Div.2 D Pashmak and Parmida's problem --樹狀數組

題意&#xff1a;給出數組A&#xff0c;定義f(l,r,x)為A[]的下標l到r之間&#xff0c;等于x的元素數。i和j符合f(1,i,a[i])>f(j,n,a[j])&#xff0c;求有多少對這樣的(i,j). 解法&#xff1a;分別從左到右&#xff0c;由右到左預處理到某個下標為止有多少個數等于該下標&…

JQuery AJAX提交中文亂碼的解決方案

$.post(doSearch.action, {page : page,vip : vip,searchType : searchType,subtype : subtype,type : type,contentType: "application/x-www-form-urlencoded; charsetutf-8", keyword : keyword}, function(data) //回傳函數{var val;}); 解決這個中文亂碼問題&am…

列舉ospf的5種報文類型_危險品貨物各種包裝類型以及裝箱技巧

對于危險貨物來說&#xff0c;其危險性的大小除與貨物的本身性質有關外&#xff0c;還與貨物的包裝方式密切相關。因而&#xff0c;危險貨物進箱條件的確定&#xff0c;也必須考慮到貨物的包裝方法。一、集裝箱內徑20GP內徑&#xff1a;長5.8M*寬2.34M*高2.34M40GP內徑&#xf…

linux一行多個命令行,如何在一行中運行多個Linux命令

對于每個Linux管理員來說&#xff0c;熟練使用各種命令行是他們的特性。但對于普通用戶來說&#xff0c;可能還是有難度&#xff0c;您需要繼續練習Linux命令&#xff0c;并找到使該任務更有效的方法。實現這個特定目標的一種方法是學習一些技巧&#xff0c;這些技巧可以提高發…

Java 數組基礎

數組 數組&#xff08;Array&#xff09;&#xff1a;相同類型數據的集合。 定義數組 方式1&#xff08;推薦&#xff0c;更能表明數組類型&#xff09; type[] 變量名 new type[數組中元素的個數]; 比如&#xff1a; int[] a new int[10]; 數組名&#xff0c;也即引用a&…

車輛跟馳模型matlab代碼實現_MATLAB——考慮駕駛員特性及前車速度的快速路模型...

重發一下之前誤刪的一篇~目前大多數元胞自動機模型并沒有考慮前車速度&#xff0c;大多數同向行駛的模型中車輛都是處在一個完全跟車的狀態&#xff0c;無論前車是加速還是減速&#xff0c;后車駕駛者都只是根據自己的車速判斷是減速跟馳還是變換車道來尋求尋求更合理的行駛狀態…

linux nc命令

參考 :http://www.linuxso.com/command/nc.html NC 全名 Netcat (網絡刀)&#xff0c;作者是 Hobbit && ChrisWysopal。因其功能十分強大&#xff0c;體積小巧而出名&#xff0c;又被大家稱為“瑞士軍刀”。nc - TCP/IP swiss army knife nc 常用于溢出、反向鏈接、上傳…

收藏一些自己認為好的網站或博客

月光博客 seo每天一貼 虎嗅網 李巖的博客 中郵閱讀網&#xff0c;專門看電子期刊的&#xff0c;很不錯的免費閱讀期刊網。 seay web安全技術博客: http://www.cnseay.com 陸陸續續編輯中... 轉載于:https://www.cnblogs.com/caoyuanzhanlang/archive/2013/01/05/2846086.html

shell 判斷字符串相等_編程小短文:Bash子字符串還在用==?試試=~性能瞬間飆升100倍...

引言Bash 是 Linux 系統下欽定的 shell。你可以通過cat /etc/shells查看當前系統支持的 shell 種類。Bash 不但是系統管理員與內核交互的利器&#xff0c;且是一種語言&#xff0c;可以編寫大多數系統的自動化腳本&#xff0c;用于簡化運維工作。今天我們學習一個知識點&#x…

linux系統聯網命令,Linux系統常用的網絡命令及使用方法

Linux系統常用的網絡命令及使用方法Linux是一套免費使用和自由傳播的類Unix操作系統&#xff0c;是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。下面小編整理了Linux系統常用的網絡命令及使用方法&#xff0c;希望對大家有幫助!1、pingping命令工作在O…

Xss Csrf 簡介

一、Js在web的執行環境 1.直接觸發 ?在HTML頁中插入<script></script>腳本標記。JS嵌入到HTML中的兩種方式&#xff1a; ?1&#xff09;直接嵌入<script>標簽 <script language“javascript”> document.write(“hello world!”); </script> ?…

Cracking the Coding Interview 5.2

Given a(decimal -e.g. 3.72)number that is passed in as a string, print the binary representation. If the number can not be represented accurately in binary, print "ERROR" 整數部分&#xff1a; 對2取余&#xff0c;然后向右移動一位&#xff0c;重復直到…

python的render函數_帶函數return的Flask render_模板

TL&#xff1b;DR在這種情況下&#xff0c;我想我會選擇使用我現在的4個選項我將介紹4種選擇&#xff0c;其中一些可能比其他更可行。在如果您擔心execute表示的代碼存在代碼重復(DRY)&#xff0c;您可以簡單地定義一個兩個路由都可以調用的函數&#xff1a;def execute():# ex…