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
发布了42 篇原创文章 · 获赞 13 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/wangzhanxidian/article/details/105037815