neo4j 驗證湖北省九省通衢

驗證從湖北省出發,到達中國任何一個省市,最多需要經過2個省

這是各省相鄰的省份的數據(數據來源於微信公衆號:讓技術一瓜共食),如下:

北京市:河北省、天津市
天津市:北京市、河北省
上海市:浙江省、江蘇省
重慶市:四川省、貴州省、陝西省、湖北省、湖南省
河北省:山東省、河南省、山西省、內蒙古自治區、遼寧省、天津市、北京市
山西省:內蒙古自治區、陝西省、河南省、河北省
遼寧省:吉林省、內蒙古自治區、河北省
吉林省:內蒙古自治區、遼寧省、黑龍江省
黑龍江省:吉林省、內蒙古自治區
江蘇省:山東省、安徽省、浙江省、上海市
浙江省:江蘇省、安徽省、上海市、江西省、福建省
安徽省:山東省、江蘇省、浙江省、江西省、湖北省、河南省
福建省:浙江省、江西省、山東省
江西省:安徽省、浙江省、福建省、廣東省、湖南省、湖北省
山東省:河北省、河南省、安徽省、江蘇省
河南省:河北省、山東省、江蘇省、安徽省、湖北省、陝西省、山西省
湖北省:河南省、安徽省、江西省、湖南省、重慶市、陝西省
湖南省:湖北省、江西省、廣東省、廣西壯族自治區、貴州省、重慶市
廣東省:福建省、江西省、湖南省、廣西壯族自治區、海南省、香港市、澳門市
海南省:廣東省
四川省:青海省、甘肅省、陝西省、重慶市、貴州省、雲南省、新疆維吾爾自治區、西藏自治區
貴州省:四川省、重慶市、湖南省、廣西壯族自治區、雲南省
雲南省:西藏自治區、四川省、貴州省、廣西壯族自治區
陝西省:內蒙古自治區、河南省、湖北省、重慶市、四川省、甘肅省、寧夏回族自治區、山西省
甘肅省:內蒙古自治區、寧夏回族自治區、陝西省、四川省、青海省、新疆維吾爾自治區
青海省:新疆維吾爾自治區、甘肅省、四川省、西藏自治區
內蒙古自治區:甘肅省、寧夏回族自治區、陝西省、山西省、河北省、遼寧省、吉林省、黑龍江省
廣西壯族自治區:雲南省、貴州省、湖南省、廣東省
西藏自治區:新疆維吾爾自治區、青海省、四川省、雲南省
寧夏回族自治區:內蒙古自治區、陝西省、甘肅省
新疆維吾爾自治區:甘肅省、青海省、西藏自治區
香港市:廣東省
澳門市:廣東省

用python將代碼整理成點數據和關係數據(python代碼不展示),導入neo,並計算從湖北出發,到達所有省份的最短路徑

下面是查詢的Cypher代碼:

//添加約束
create constraint on (n:Province)
assert n.Name is unique;

//導入node
with "file:///province_nodes.csv" as uri
load csv with headers from uri as row
merge (name:Province {Name:row.name});

//導入edge
with "file:///province_realtionship.csv" as uri
load csv with headers from uri as row
match (origin:Province {Name:row.name1})
match (destination:Province {Name:row.name2})
merge (origin)-[:相鄰]-(destination);

//查詢從湖北出發到達各省的最短路徑
//使用的neo4j的算法包shortestPath
//也可以直接使用單源最短路徑算法algo.shortestPath.deltaStepping
match (n:Province)
with collect(n) as all_nodes
unwind all_nodes as dest
match (source:Province {Name:"湖北省"}),(destination:Province {Name:dest.Name})
call algo.shortestPath.stream(source,destination,null)
yield nodeId,cost
return dest.Name as destination,collect(algo.getNodeById(nodeId).Name) as via,toInteger(collect(cost)[-1]) as costs
order by costs desc

結果如下(neo4j 只能插入有向圖,但是在查詢計算的時候不考慮方向,當做無向圖就可以,不影響計算):

destination via costs
黑龍江省 [湖北省,陝西省,內蒙古自治區,黑龍江省] 3
海南省 [湖北省,江西省,廣東省,海南省] 3
雲南省 [湖北省,重慶市,四川省,雲南省] 3
青海省 [湖北省,重慶市,四川省,青海省] 3
西藏自治區 [湖北省,重慶市,四川省,西藏自治區] 3
新疆維吾爾自治區 [湖北省,重慶市,四川省,新疆維吾爾自治區] 3
香港市 [湖北省,江西省,廣東省,香港市] 3
澳門市 [湖北省,江西省,廣東省,澳門市] 3
北京市 [湖北省,河南省,河北省,北京市] 3
天津市 [湖北省,河南省,河北省,天津市] 3
上海市 [湖北省,安徽省,江蘇省,上海市] 3
遼寧省 [湖北省,河南省,河北省,遼寧省] 3
吉林省 [湖北省,陝西省,內蒙古自治區,吉林省] 3
江蘇省 [湖北省,安徽省,江蘇省] 2
浙江省 [湖北省,安徽省,浙江省] 2
福建省 [湖北省,江西省,福建省] 2
山東省 [湖北省,安徽省,山東省] 2
廣東省 [湖北省,江西省,廣東省] 2
四川省 [湖北省,重慶市,四川省] 2
貴州省 [湖北省,重慶市,貴州省] 2
甘肅省 [湖北省,陝西省,甘肅省] 2
內蒙古自治區 [湖北省,陝西省,內蒙古自治區] 2
廣西壯族自治區 [湖北省,湖南省,廣西壯族自治區] 2
寧夏回族自治區 [湖北省,陝西省,寧夏回族自治區] 2
河北省 [湖北省,河南省,河北省] 2
山西省 [湖北省,陝西省,山西省] 2
安徽省 [湖北省,安徽省] 1
江西省 [湖北省,江西省] 1
河南省 [湖北省,河南省] 1
湖南省 [湖北省,湖南省] 1
陝西省 [湖北省,陝西省] 1
重慶市 [湖北省,重慶市] 1

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章