Skip to content

Instantly share code, notes, and snippets.

@castaneai
Created April 22, 2014 14:05
Show Gist options
  • Save castaneai/11180528 to your computer and use it in GitHub Desktop.
Save castaneai/11180528 to your computer and use it in GitHub Desktop.
#include<stdio.h>
#include<math.h>
double qc(double a,double b,double c)/*qc means quadratic formula*/{
double result;
result=(-b+sqrt(pow(b,2)-4*a*c))/(2*a);
return result;
}
void main(){
const double SDA=70,SDB=30;
/*Sd=Shortest Distance 最短距離 つまり川からAおよびBへの最短距離*/
int a,b;
/*AおよびBの川への最短距離から実際に渡る地点までの距離をa,bとおいた*/
const double WIDTH=140,LENGTH=210;
/*川の幅をWIDTH 川の長さをLENGTHとした*/
const double FLOW=0.9;
/*川の流れの速さをFLOWとした*/
const double MSOF=1,MSOR=6;
/*Movement speed on Field(River) */
double i,j,k,t;
/*i,j,kはqc関数をつかうためのix^2+jx+kとするためのもの*/
/*tは総所要時間*/
double tempT=1000,tempA=0,tempB=0;
/*temp~という変数は一時的に最小値を格納し保存するために用いるもの*/
for(a=0;a<210;a++){
/*aを1mごとに210mまでずらしていった 
a++の部分をa=a+0.1等に変えることでより精度は高めることが出来る*/
for(b=0;b<210;b++){
/*bをaと同様に1mごとに210mまでずらしていった
aと同様にb++の部分をb=b+0.1等に変えることでより精度は高めることが出来る*/
i=pow(LENGTH-a-b,2)+pow(WIDTH,2);
j=-2*(LENGTH-a-b)*WIDTH*FLOW;
k=pow(WIDTH,2)*(pow(FLOW,2)-pow(MSOR,2));
/*(root(MSOR^2-x^2)+FLOW)/x=(LENGTH-a-b)/WIDTH
という川を渡る際のx座標に関する式をxについて解くと
(pow(LENGTH-a-b,2)+(pow(WIDTH,2))*x^2+-2*(LENGTH-a-b)*WIDTH*FLOW)*x+(pow(WIDTH,2)*(pow(FLOW,2)-pow(MSOR,2)))となった*/
t=WIDTH/qc(i,j,k)+(sqrt(a*a+SDA*SDA)+sqrt(b*b+SDB*SDB))/MSOF;
/*上記のi,j,kを用いて水上での時間及び陸上での時間を総計した結果をtに入れた*/
if(tempT>t){
tempT=t;
tempA=a;
tempB=b;
}
/*もし求めたtが今までのもののなかで最小だった場合tempTに代入
同時にその時のaとbの値を保存した*/
}
}
printf("%f %f %f\n",tempT,tempA,tempB);
/*最短時間とその時のa,bを出力する*/
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment