专题四 Problem J
来源:互联网 发布:linux malloc实现原理 编辑:程序博客网 时间:2024/05/17 06:09
一、题目编号:
1010
二、简单题意:
1010
二、简单题意:
Jimmy一最近在工作上感觉很大的压力,为了放松,他决定要从树林一端穿到另一端回家,因为树林中的环境非常漂亮。办公室是起点,为1,终点是家为2,要求: 每次到达新点一定是更加接近终点,问有多少种路径
三、解题思路形成过程
开始用dijkstra算法求出所有点到终点的最短距离,然后用深搜搜索求出路径个数。
开始用dijkstra算法求出所有点到终点的最短距离,然后用深搜搜索求出路径个数。
四、感想
思路想清楚,主要是利用了dijkstra算法和之前专题练习的深搜,这个题目相对之前做的就比较综合了。
思路想清楚,主要是利用了dijkstra算法和之前专题练习的深搜,这个题目相对之前做的就比较综合了。
五、AC代码
#include<stdio.h>
#include<string.h>
#include<queue>
#define INF 0x1f1f1f
using namespace std;
int head[1002];
struct node
{
int to,w,next;
}q[3000002];
struct node2
{
int xu,di;
bool operator < (node2 t)const
{
return t.di<di;
}
}tt,in;
int tot;
int n,sum;
void add(int s,int t,int wi)
{
q[tot].to=t;
q[tot].next=head[s];
q[tot].w=wi;
head[s]=tot++;
}
int d[1002];
void dijkstra(int v)
{
priority_queue<node2>dis;
int i;
in.xu=v;
in.di=0;
d[v]=0;
dis.push(in);
while(!dis.empty())
{
tt=dis.top();
if(tt.xu==1)break;
dis.pop();
for(i=head[tt.xu];i;i=q[i].next)
{
in.xu=q[i].to;
in.di=tt.di+q[i].w;
if(in.di<d[in.xu])
{
d[in.xu]=in.di;
dis.push(in);
}
}
#include<string.h>
#include<queue>
#define INF 0x1f1f1f
using namespace std;
int head[1002];
struct node
{
int to,w,next;
}q[3000002];
struct node2
{
int xu,di;
bool operator < (node2 t)const
{
return t.di<di;
}
}tt,in;
int tot;
int n,sum;
void add(int s,int t,int wi)
{
q[tot].to=t;
q[tot].next=head[s];
q[tot].w=wi;
head[s]=tot++;
}
int d[1002];
void dijkstra(int v)
{
priority_queue<node2>dis;
int i;
in.xu=v;
in.di=0;
d[v]=0;
dis.push(in);
while(!dis.empty())
{
tt=dis.top();
if(tt.xu==1)break;
dis.pop();
for(i=head[tt.xu];i;i=q[i].next)
{
in.xu=q[i].to;
in.di=tt.di+q[i].w;
if(in.di<d[in.xu])
{
d[in.xu]=in.di;
dis.push(in);
}
}
}
}
int j[1002];
int dfs(int r)
{
int i,k=0;
if(j[r]!=-1)
return j[r];
for(i=head[r];i;i=q[i].next)
if(d[q[i].to]<d[r])
k+=dfs(q[i].to);
return j[r]=k;
}
int main()
{
int i,m,a,b,w;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
tot=1;
memset(j,-1,sizeof(j));
memset(head,0,sizeof(head));
memset(d,INF,sizeof(d));
while(m--)
{
scanf("%d%d%d",&a,&b,&w);
add(a,b,w);
add(b,a,w);
}
dijkstra(2);
j[2]=1;
printf("%d\n",dfs(1));
}
return 0;
}
}
int j[1002];
int dfs(int r)
{
int i,k=0;
if(j[r]!=-1)
return j[r];
for(i=head[r];i;i=q[i].next)
if(d[q[i].to]<d[r])
k+=dfs(q[i].to);
return j[r]=k;
}
int main()
{
int i,m,a,b,w;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
tot=1;
memset(j,-1,sizeof(j));
memset(head,0,sizeof(head));
memset(d,INF,sizeof(d));
while(m--)
{
scanf("%d%d%d",&a,&b,&w);
add(a,b,w);
add(b,a,w);
}
dijkstra(2);
j[2]=1;
printf("%d\n",dfs(1));
}
return 0;
}
0 0
- 专题四 Problem J
- 专题三 Problem J
- 第四专题 Problem J
- 1010-J专题四
- 专题四 Problem A
- 专题四 Problem B
- 专题四 Problem C
- 专题四 Problem D
- 专题四 Problem E
- 专题四 Problem F
- 专题四 Problem I
- 专题四 Problem H
- 专题四 Problem K
- 专题四 Problem L
- 专题四 Problem M
- 专题四 Problem A
- 专题四 Problem B
- 专题四 Problem D
- CentOS开启FTP及配置用户
- 设计模式分类以及六大原则
- MarkDownPad私钥
- 机器学习算法——梯度下降法
- iOS中常用的毛玻璃处理
- 专题四 Problem J
- Why doesn't Objective-C support private methods?
- Struts2学习(八)—文件上传和下载
- java实现对hdfs文件系统的上传,下载,删除,创建文件夹的操作演示
- 2016.6.26 A New Start
- [326] Power of Three
- Matlab 视频格式转换
- Fresco库,自定义图片缓存的key
- 浅谈web应用的负载均衡、集群、高可用(HA)解决方案