专题四1010
来源:互联网 发布:linux oracle服务很卡 编辑:程序博客网 时间:2024/06/01 09:25
题意:从1走到2有最短路为定值,求最短路有几条
解题思路:先求出最短路,然后搜索求出最短路的条数
感想:明天就考试了。。。
AC源码:
#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;
}
cin>>m;
while(m--)
{
cin>>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(cin>>n&&n)
{
set(n);
spfa(n);
k=DFS(1,n);
cout<<k<<endl;
}
}
Problem J
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 43 Accepted Submission(s) : 12
5 61 3 21 4 23 4 31 5 124 2 345 2 247 81 3 11 4 13 7 17 4 17 5 16 7 15 2 16 2 10
24
- 专题四1010
- 专题四 · 1010
- 1010-J专题四
- 3G专题四
- LDAP专题(四)
- 专题四1003
- 专题四1003
- 专题四 · 1001
- 专题四 Problem A
- 专题四 Problem B
- 专题四 Problem C
- 专题四 Problem D
- 专题四 Problem E
- 专题四1001
- 专题四1005
- 专题四1004
- 专题四ACM1003
- 专题四1004
- mysql日志详细解析
- 响应式 Web
- Linux Vsftpd 连接超时解决方法
- C#控制台 控制台闪退的解决方法
- bzoj 1937 最小生成树【费用流】
- 专题四1010
- 属性动画设置延迟后,如果在未开始前取消,会执行onAnimationStart方法,特此记录
- 178 无法连接远程服务器mysql数据库
- 异常org.xmlpull.v1.XmlPullParserException
- 浅谈爬虫
- C#控制台 console.writeline输出变量
- 8张图让你轻轻松松理解Java的各种特性
- HDOJ 2588 GCD
- BZOJ2791: [Poi2012]Rendezvous