题目链接

题意 :办公室编号为1,家编号为2,问从办公室到家有多少条路径,当然路径要短,从A走到B的条件是,A到家比B到家要远,所以可以从A走向B 。

思路 : 先以终点为起点求最短路,然后记忆化搜索。

 //
#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
const int INF = << ;
using namespace std ; int N,M ;
int mapp[][] ,pre[],dist[];
bool vis[] ; void spfa(int src)
{
for(int i = ; i <= N ; i++)
{
vis[i] = false ;
dist[i] = INF ;
}
queue<int>Q ;
dist[src] = ;
vis[src] = true ;
Q.push(src) ;
while(!Q.empty())
{
int u = Q.front() ;
Q.pop() ;
vis[u] = false ;
for(int i = ; i <= N ; i++)
{
if(dist[i] > dist[u] + mapp[u][i] && mapp[u][i] != INF)
{
dist[i] = dist[u] + mapp[u][i] ;
if(!vis[i])
{
vis[i] = true ;
Q.push(i) ;
}
}
}
}
}
int dfs(int s)
{
if(pre[s]) return pre[s];
if(s == ) return ;
int cnt = ;
for(int i = ;i <= N ; i++)
{
if(mapp[s][i] < INF && dist[s] > dist[i])
{
if(pre[i]) cnt += pre[i];//已经找过了
else cnt += dfs(i);
}
}
pre[s] = cnt ;
return pre[s];
}
void Init()
{
for(int i = ; i <= N ; i++)
for(int j = ; j <= N ; j++)
{
if(i == j) mapp[i][j] = ;
else mapp[i][j] = INF ;
}
memset(pre,,sizeof(pre)) ;
}
int main()
{
while(cin >> N)
{
if(N == ) break ;
cin >> M ;
Init() ;
int u,v,w ;
while(M--)
{
cin >> u >> v >> w ;
mapp[u][v] = mapp[v][u] = w ;
}
spfa() ;
cout << dfs() << endl ;
}
return ;
}

最新文章

  1. 基于jquery封装的颜色下拉选择框
  2. 一次诡异的TOMCAT启动故障的解决
  3. android studio 乱码
  4. C primer plus 练习题 第一章
  5. TortoiseGit 的使用
  6. 分数的加减法——C语言初学者代码中的常见错误与瑕疵(12)
  7. Mingyang.net:注解配置Hibernate时报错Unknown Entity
  8. inflate方法与findViewById的区别
  9. oracle16 例外
  10. ural 1353. Milliard Vasya&#39;s Function
  11. 当nginx 500 伪静态错误时,记录解决方法rewrite or internal redirection cycle while processing
  12. xhprof
  13. java list基本用法
  14. 复习java7 集合的底层实现理解
  15. AngularJS复习------表单验证
  16. Java高级应用简笔
  17. Python BeautifulSoup 使用
  18. 【.NET】using 语句中使用的类型必须可隐式转换为&quot;System.IDisposable&quot;
  19. webpack配置的基本介绍
  20. OC学习笔记

热门文章

  1. iOS进阶学习-CoreData
  2. WordPress实现长篇文章/日志/单页面分页功能效果
  3. rm -rf删除过多文件提示参数过长
  4. 使用git客户端获取shiro
  5. 简单修改 MySQL 的 root 账号密码
  6. NABC的特点分析
  7. 【Search Insert Position 】cpp
  8. adb 连接时 device offline
  9. Gulp压缩JavaScript代码
  10. 在mac下使用brew和brew cask轻松实现软件安装