POJ1122 DIJKSTRA

这是道烂题目,思路的难度比阅读题目的难度还低。

然后输出的恶心格式。

反正就是烂题。

#include<iostream>

#include<string>
#include<vector>
using namespace std;
const int N=22;
int street[N][N];
unsigned int dist[N];
int n;
bool visit[N];
int pre[N];
int des;
int org[N];
string out[N];
int time[N];
vector<int> vec[N];
void print(int who)
{
printf("%d\t%d\t%d\t%d\t",who,des,time[who],who);

for(vector<int>::reverse_iterator iv=vec[who].rbegin();iv!=vec[who].rend();iv++)
{
printf("%d\t",*iv);
}
printf("\n");
}
void dijkstra(int org)
{
memset(visit,0,sizeof(visit));
memset(dist,-1,sizeof(dist));
memset(pre,0,sizeof(pre));
visit[org]=1;
dist[org]=0;
while(!visit[des])
{
unsigned int min=-1;
unsigned int mink=0;
int pr=0;
for(int i=1;i<=n;i++)
{
if(visit[i])
{
for(int j=1;j<=n;j++)
{
if(street[i][j]!=-1&&i!=j&&!visit[j])
{
if(street[i][j]+dist[i]<dist[j])
{
dist[j]=street[i][j]+dist[i];
pre[j]=i;


}
if(dist[j]<min)
{
min=dist[j];
mink=j;

}


}
}
}
}
visit[mink]=true;


}
int node=des;
while(pre[node]!=0)
{
vec[org].push_back(node);
node=pre[node];
}
time[org]=dist[des];
}
int main()
{
//freopen("C:\\Users\\wuyanyisb\\Desktop\\1.txt","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&street[i][j]);
scanf("%d",&des);
int k=1;
while(scanf("%d",&org[k])!=EOF)k++;
k--;
printf("Org\tDest\tTime\tPath\t\n");
for(int i=1;i<=k;i++)
dijkstra(org[i]);
bool vis[N];
memset(vis,0,sizeof(vis));
for(int ii=1;ii<=k;ii++)
{
int mink=0;
unsigned int min=-1;
for(int i=1;i<=k;i++)
{
if(time[org[i]]<min&&!vis[org[i]])
{
min=time[org[i]];
mink=org[i];

}
}
print(mink);
vis[mink]=true;


}


return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值