arash_65
دوشنبه 24 دی 1386, 16:41 عصر
لطفا در مورد چگونگی کامپایل برنامه توضیح دهید چون من هر موقع این برنامه را در visual باز میکنم دکمه اجرای برنامه غیر فعال است.
کد برنامه:
#include <iostream>
#include <ctime>
#include <vector>
#include <fstream>
#include <cmath>
#include <iomanip>
#define pow2(x) ((x)*(x))
using namespace std;
struct point{
double x,y;
bool operator ==(point &p) const {
return (p.x == x && p.y == y );
}
};
struct line {
point sar,tah;
double length;
};
struct cross {
point now; // neshun mide alan in masir be kodum noghte reside
int tunnel;
double sum;
cross(){
sum=0;
}
};
inline double dist(point &p,point &q){
return sqrt(pow2(p.x-q.x)+pow2(p.y-q.y));
}
int way[30];
int main(){
clock_t cl=clock();
ifstream in("sharif_00_d.in");
int T;
in >> T;
while (T--){
vector <vector <line> > v (101);// tunnel haye hamrang ro ye ja mizarim
point s,t;
in >> s.x >> s.y >> t.x >> t.y;
int step; in >> step;
for (int i=0;i<step;++i)
in >> way[i];
int n;
in>>n;
line temp;
int color;
for (int i=0;i<n;++i){
in >> temp.sar.x >> temp.sar.y >> temp.tah.x >> temp.tah.y >> color;
temp.length = dist (temp.sar,temp.tah);
v[color].push_back(temp);
}
vector <vector<cross> > c(step);
cross temp1;
for (int i=0;i<step;++i){
for (int j=0;j<v[way[i]].size();++j){
if (i==0){
temp1.now = v[way[i]][j].tah;
temp1.sum = dist(s,v[way[i]][j].sar) + v[way[i]][j].length;
temp1.tunnel=i+1;
c[i].push_back(temp1);
temp1.now = v[way[i]][j].sar;
temp1.sum = dist(s,v[way[i]][j].tah) + v[way[i]][j].length;
c[i].push_back(temp1);
}
else
for (int k=0;k<c[i-1].size();++k){
temp1.now = v[way[i]][j].tah;
temp1.sum = c[i-1][k].sum + dist(c[i-1][k].now,v[way[i]][j].sar) + v[way[i]][j].length;
temp1.tunnel=i+1;
c[i].push_back(temp1);
temp1.now = v[way[i]][j].sar;
temp1.sum = c[i-1][k].sum + dist(c[i-1][k].now,v[way[i]][j].tah) + v[way[i]][j].length;
c[i].push_back(temp1);
}
}
// hazf:
if (i!=0){
for (int l=0;l<c[i].size();++l)
for (int o=l+1;o<c[i].size();++o)
if (c[i][l].now == c[i][o].now)
if ( c[i][l].sum < c[i][o].sum){
c[i].erase(c[i].begin()+o);
--o;
continue;
}
else if ( c[i][l].sum > c[i][o].sum){
c[i].erase(c[i].begin()+l);
--l;
break;
}
}//if
}
double ans=1000000000;
for (int i=0;i<c[step-1].size();++i)
ans = min (ans,c[step-1][i].sum + dist(c[step-1][i].now,t));
cout << fixed << setprecision(14) << ans << endl;
// khat hayi ke rangeshun ba way yekiye ro entekhab mikonim va ye bar az sar be tah mirim ye bar az tah be sar :D
// bayad tahe khat ( age az sar berim tah :d ) , az beyne tamame masir haye ke ta hala be inja residan va way ashun yekiye
// min entekhab beshe ( baghiye hazf beshan )
}
cout << "Time: " << ( clock()-cl ) * 0.001 << endl;
return 0;
}
کد برنامه:
#include <iostream>
#include <ctime>
#include <vector>
#include <fstream>
#include <cmath>
#include <iomanip>
#define pow2(x) ((x)*(x))
using namespace std;
struct point{
double x,y;
bool operator ==(point &p) const {
return (p.x == x && p.y == y );
}
};
struct line {
point sar,tah;
double length;
};
struct cross {
point now; // neshun mide alan in masir be kodum noghte reside
int tunnel;
double sum;
cross(){
sum=0;
}
};
inline double dist(point &p,point &q){
return sqrt(pow2(p.x-q.x)+pow2(p.y-q.y));
}
int way[30];
int main(){
clock_t cl=clock();
ifstream in("sharif_00_d.in");
int T;
in >> T;
while (T--){
vector <vector <line> > v (101);// tunnel haye hamrang ro ye ja mizarim
point s,t;
in >> s.x >> s.y >> t.x >> t.y;
int step; in >> step;
for (int i=0;i<step;++i)
in >> way[i];
int n;
in>>n;
line temp;
int color;
for (int i=0;i<n;++i){
in >> temp.sar.x >> temp.sar.y >> temp.tah.x >> temp.tah.y >> color;
temp.length = dist (temp.sar,temp.tah);
v[color].push_back(temp);
}
vector <vector<cross> > c(step);
cross temp1;
for (int i=0;i<step;++i){
for (int j=0;j<v[way[i]].size();++j){
if (i==0){
temp1.now = v[way[i]][j].tah;
temp1.sum = dist(s,v[way[i]][j].sar) + v[way[i]][j].length;
temp1.tunnel=i+1;
c[i].push_back(temp1);
temp1.now = v[way[i]][j].sar;
temp1.sum = dist(s,v[way[i]][j].tah) + v[way[i]][j].length;
c[i].push_back(temp1);
}
else
for (int k=0;k<c[i-1].size();++k){
temp1.now = v[way[i]][j].tah;
temp1.sum = c[i-1][k].sum + dist(c[i-1][k].now,v[way[i]][j].sar) + v[way[i]][j].length;
temp1.tunnel=i+1;
c[i].push_back(temp1);
temp1.now = v[way[i]][j].sar;
temp1.sum = c[i-1][k].sum + dist(c[i-1][k].now,v[way[i]][j].tah) + v[way[i]][j].length;
c[i].push_back(temp1);
}
}
// hazf:
if (i!=0){
for (int l=0;l<c[i].size();++l)
for (int o=l+1;o<c[i].size();++o)
if (c[i][l].now == c[i][o].now)
if ( c[i][l].sum < c[i][o].sum){
c[i].erase(c[i].begin()+o);
--o;
continue;
}
else if ( c[i][l].sum > c[i][o].sum){
c[i].erase(c[i].begin()+l);
--l;
break;
}
}//if
}
double ans=1000000000;
for (int i=0;i<c[step-1].size();++i)
ans = min (ans,c[step-1][i].sum + dist(c[step-1][i].now,t));
cout << fixed << setprecision(14) << ans << endl;
// khat hayi ke rangeshun ba way yekiye ro entekhab mikonim va ye bar az sar be tah mirim ye bar az tah be sar :D
// bayad tahe khat ( age az sar berim tah :d ) , az beyne tamame masir haye ke ta hala be inja residan va way ashun yekiye
// min entekhab beshe ( baghiye hazf beshan )
}
cout << "Time: " << ( clock()-cl ) * 0.001 << endl;
return 0;
}