Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //dijktra
- #include<iostream>
- #include<fstream>
- using namespace std;
- typedef unsigned int ui;
- ifstream fi("input.inp");
- ofstream fo("output.out");
- ui sum=0;
- void nhap(ui **&a,ui *&length,ui *&p,bool *&s,ui &n,ui &m,ui &dau,ui &cuoi){
- fi>>n>>m>>dau>>cuoi;dau--;cuoi--;
- ui i,j,u,v;
- a=new ui*[n];length=new ui[n];p=new ui[n];s=new bool[n];
- for(i=0;i<n;i++) a[i]=new ui[n];
- for(i=0;i<n;i++){
- for(j=0;j<n;j++) a[i][j]=0;
- }
- // khoi tao matran va mang
- for(i=0;i<m;i++){
- fi>>u>>v;u--;v--;
- fi>>a[u][v];
- // a[u][v]=1;a[v][u]=1;
- sum=sum+a[u][v];
- }
- sum++;
- for(i=0;i<n;i++){
- length[i]=sum;
- p[i]=dau;
- s[i]=true;
- for(j=0;j<n;j++) if(i!=j&&a[i][j]==0) a[i][j]=sum;
- }
- /* for(i=0;i<n;i++){
- for(j=0;j<n;j++) cout<<a[i][j]<<"\t";
- cout<<endl;
- }*/
- length[dau]=0;
- }
- void dijika(ui **a,ui *length,ui *p,bool *s,ui n,ui dau,ui cuoi){
- ui i,j;
- while(s[cuoi]){
- for(i=0;i<n;i++) if(s[i]&&length[i]<sum) break;
- if(i>=n) break;
- for(j=0;j<n;j++) if(s[j]&&length[i]>length[j]) i=j;
- s[i]=false;
- for(j=0;j<n;j++) if(s[j]&&length[j]>a[i][j]+length[i]){
- length[j]=a[i][j]+length[i];
- p[j]=i;
- }
- }
- }
- void xuat(ui i,ui dau,ui *p){
- if(i==dau){
- fo<<i+1<<"\t";
- return;
- }
- xuat(p[i],dau,p);
- fo<<i+1<<"\t";
- }
- int main(){
- ui **a,*length,*p,n,m,dau,cuoi;
- bool *s;
- nhap(a,length,p,s,n,m,dau,cuoi);
- dijika(a,length,p,s,n,dau,cuoi);
- if(length[cuoi]>0&&length[cuoi]<sum){
- fo<<length[cuoi]<<endl;
- xuat(cuoi,dau,p);
- }
- else cout<<"khong tim duoc duong\n";
- fi.close();fo.close();
- delete []s;delete []p;delete []length;
- for(m=0;m<n;m++) delete []a[m];
- delete []a;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement