hdu 1142 记忆化搜索 dijkstra
2015-11-28 16:35
381 查看
遇到了不少问题
下面是AC的代码,这几个问题有人也遇到的或者知道为什么的留言告诉下
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/wail.gif)
下面是AC的代码,这几个问题有人也遇到的或者知道为什么的留言告诉下
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/wail.gif)
#include <cmath> #include <cstdio> #include <cstdlib> #include <iostream> #include <algorithm> #include <string.h> #define inf 99999999 using namespace std; int n,m,map[1505][1505],dp[1505],dis[1505]; bool vis[1505]; void init() { int i,j; memset(dp,0,sizeof(dp)); memset(vis,0,sizeof(vis)); for(i = 1; i <= n; i++) { for(j = 1; j <= n; j++) { if(j == i) map[i][j] = 0; else map[i][j] = inf; } } } void dijkstra(int v0) { int i,j,u; vis[v0] = 1; for(i = 1; i <= n; i++) dis[i] = map[v0][i]; for(i = 1; i < n; i++) { int minn = inf,u; for(j = 1; j <= n; j++) { if(!vis[j] && dis[j] < minn) { minn = dis[j]; u = j; } } if(minn == inf) return;//不知道为什么这句没有就 会数组越界 vis[u] = 1; for(j = 1; j <= n; j++) { if(!vis[j] && map[u][j] < inf &&dis[j] > dis[u] + map[u][j]) dis[j] = dis[u] + map[u][j]; } } } int dfs(int v) { if(v == 2) return 1;//修改 if(dp[v]) return dp[v]; int i,j; for(i = 1; i <= n; i++) { if(map[i][v] < inf && dis[i] < dis[v]) dp[v]+=dfs(i);//修改 } return dp[v]; } int main() { // freopen("t.txt","r",stdin); int i,j,p,q,r; while(~scanf("%d",&n) && n) { scanf("%d",&m); init(); for(i = 0; i < m; i++) { scanf("%d%d%d",&p,&q,&r); if(map[p][q] >= r) map[p][q] = map[q][p] = r; } dijkstra(2); int count = dfs(1);//不知道为什么从2作为起点搜就会错(从2开始搜的时候上面标记修改的地方也改了) printf("%d\n",count); } }
相关文章推荐
- 软件设计度量工具structure101学习(四):complexity的使用与计算
- SplashActivity
- 动感男生XP开关机音乐
- 刚用andriod studio 的一点心得感受
- 2013蓝桥杯C语言B 带分数(16`)
- Lex+Yacc or Flex+Bison
- python多线程编程例子实验
- virtualbox 下Windows、Linux共享文件夹
- 构造函数与普通函数的比较
- Python中模拟C#对应Linq的一些操作
- iOS C语言 分支结构 循环结构
- char 类型的整型提升
- win7开启来宾模式,局域网内各PC共享查看
- mysql匹配汉字字符
- linux串口资料
- 【Win】使用L2TP出现809错误
- 1-3-20:计算2的幂
- CSS选择器
- linux 安装mysql数据库——tar.gz包解压安装法
- Linux 2.6 schedule() 切换进程时没有释放rq->lock却又为何不会导致死锁?