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 只能插入有向图,但是在查询计算的时候不考虑方向,当做无向图就可以,不影响计算):

destinationviacosts
黑龙江省[湖北省,陕西省,内蒙古自治区,黑龙江省]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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值