2016sdau课程练习专题三 1010
2016-07-09 12:01
330 查看
1.题目编号
1010
2.简单题意
一个人的办公室用1表示,家用2 表示,从1到2,中间可能会经过其它节点,而该节点可走的原则是:假设他此时在A处,B与其相邻,只有当B到2 路线中存在一条比A到2 的任意一条路径都短的路径,才能走B。问这样的路线有多少种?
3.解题思路
求出各点到2-1的最短距离 同时存贮其它点到2的最短距离,然后记忆化搜索 从1开始 找到符合条件的路径数
4.感想
题目很难理解,毕竟是英文啊,而且这道题做起来太难了,考虑的情况有点多
5.代码
#include<iostream>
#include<queue>
using namespace std;
typedef struct n1
{
int distens,flog;
}node;
node N[1005];
int map[1005][1005],k;
int direct[1005];
void set(int n)
{
int i,j,m,n1,n2,d;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
map[i][j]=-1;
}
N[i].distens=10000000;N[i].flog=0;direct[i]=0;
}
scanf("%d",&m);
while(m--)
{
scanf("%d%d%d",&n1,&n2,&d);
if(map[n1][n2]!=0||map[n1][n2]>d)
map[n1][n2]=map[n2][n1]=d;
}
}
void spfa(int n)
{
queue<int> Q;
int now;
int i;
N[2].distens=0;N[2].flog=1;
Q.push(2);
while(!Q.empty())
{
now=Q.front();
Q.pop();
N[now].flog=0;
//if(q.x==1)break;
for(i=1;i<=n;i++)
if(map[now][i]!=-1)
{
if(N[i].distens>N[now].distens+map[now][i])
{
N[i].distens=N[now].distens+map[now][i];
if(N[i].flog==0)
{
N[i].flog=1;
Q.push(i);
}
}
}
}
}
int DFS(int now,int n)
{
int i;
if(direct[now]>0)
return direct[now];
if(now==2)
{
return 1;
}
for(i=1;i<=n;i++)
if(map[now][i]!=-1&&N[now].distens>N[i].distens)
{
direct[now]+=DFS(i,n);
}
return direct[now];
}
int main()
{
int n;
while(scanf("%d",&n)>0&&n)
{
set(n);
spfa(n);
k=DFS(1,n);
printf("%d\n",k);
}
}
void init( int n ){
for( int i=0;i<n;i++ ){
fa[i] = i;
circle[ i ] = -1;
}
}
int cmp( node a,node b ){
return a.val>b.val;
}
int main(){
int n,m;
while( scanf("%d%d",&n,&m)==2,n||m ){
//if( n==0&&m==0 ) break;
for( int i=0;i<m;i++ )
scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].val);
init( n );
sort( edge,edge+m,cmp );
int ans = 0;
for( int i=0;i<m;i++ ){
if( union_ab( edge[i].u,edge[i].v) )
ans += edge[i].val;
}
printf("%d\n",ans);
}
return 0;
}
1010
2.简单题意
一个人的办公室用1表示,家用2 表示,从1到2,中间可能会经过其它节点,而该节点可走的原则是:假设他此时在A处,B与其相邻,只有当B到2 路线中存在一条比A到2 的任意一条路径都短的路径,才能走B。问这样的路线有多少种?
3.解题思路
求出各点到2-1的最短距离 同时存贮其它点到2的最短距离,然后记忆化搜索 从1开始 找到符合条件的路径数
4.感想
题目很难理解,毕竟是英文啊,而且这道题做起来太难了,考虑的情况有点多
5.代码
#include<iostream>
#include<queue>
using namespace std;
typedef struct n1
{
int distens,flog;
}node;
node N[1005];
int map[1005][1005],k;
int direct[1005];
void set(int n)
{
int i,j,m,n1,n2,d;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
map[i][j]=-1;
}
N[i].distens=10000000;N[i].flog=0;direct[i]=0;
}
scanf("%d",&m);
while(m--)
{
scanf("%d%d%d",&n1,&n2,&d);
if(map[n1][n2]!=0||map[n1][n2]>d)
map[n1][n2]=map[n2][n1]=d;
}
}
void spfa(int n)
{
queue<int> Q;
int now;
int i;
N[2].distens=0;N[2].flog=1;
Q.push(2);
while(!Q.empty())
{
now=Q.front();
Q.pop();
N[now].flog=0;
//if(q.x==1)break;
for(i=1;i<=n;i++)
if(map[now][i]!=-1)
{
if(N[i].distens>N[now].distens+map[now][i])
{
N[i].distens=N[now].distens+map[now][i];
if(N[i].flog==0)
{
N[i].flog=1;
Q.push(i);
}
}
}
}
}
int DFS(int now,int n)
{
int i;
if(direct[now]>0)
return direct[now];
if(now==2)
{
return 1;
}
for(i=1;i<=n;i++)
if(map[now][i]!=-1&&N[now].distens>N[i].distens)
{
direct[now]+=DFS(i,n);
}
return direct[now];
}
int main()
{
int n;
while(scanf("%d",&n)>0&&n)
{
set(n);
spfa(n);
k=DFS(1,n);
printf("%d\n",k);
}
}
void init( int n ){
for( int i=0;i<n;i++ ){
fa[i] = i;
circle[ i ] = -1;
}
}
int cmp( node a,node b ){
return a.val>b.val;
}
int main(){
int n,m;
while( scanf("%d%d",&n,&m)==2,n||m ){
//if( n==0&&m==0 ) break;
for( int i=0;i<m;i++ )
scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].val);
init( n );
sort( edge,edge+m,cmp );
int ans = 0;
for( int i=0;i<m;i++ ){
if( union_ab( edge[i].u,edge[i].v) )
ans += edge[i].val;
}
printf("%d\n",ans);
}
return 0;
}
相关文章推荐
- spring 概述
- C++常量折叠
- openmp并行计算
- scala数据库工具类
- AIDL使用(一)
- Find Closet Pairs -- To be continue
- CPP【北京大学暑期课《ACM/ICPC竞赛训练》】高山滑雪
- hdu 5064 Find Sequence(DP,单调性优化)
- 常见排序算法
- 解决configure: WARNING: You will need re2c 0.13.4 or later
- 【NOIP2010提高组】关押罪犯
- Android界面编程——对话框控件(四)
- iOS图片加工---图片水印,图片裁剪和屏幕截图
- Guava collections -- Ordering
- Android bug之transformClassesWithDexForDebug
- React实战-深入了解JSX
- 【Hibernate 4】一对多映射配置
- 【Hibernate 4】一对多映射配置
- 【LeetCode】105 & 106 Construct Binary Tree from (Preorder and Inorder) || (Inorder and Postorder)Traversal
- 七牛云存储使用笔记