#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<fstream>
#include<ctype.h>
#include<vector>
using namespace std;
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<fstream>
#include<ctype.h>
#include<vector>
using namespace std;
#define INF 100000.0
#define MAXN 150
#define MAXN 150
struct vertex {
double x;
double y;
}v[MAXN];
double g[MAXN][MAXN]={0};
int n;
double dlin (double x1 , double y1 , double x2 , double y2)
{
return sqrt ( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) ) ;
}
int main ()
{
//ios_base::sync_with_stdio(0);
freopen ("cowtour.in","r",stdin);
freopen ("cowtour.out","w",stdout);
int i,j;
char t;
cin>>n;
for (i=0;i<n;i++)
{
cin>>v[i].x>>v[i].y;
}
double x;
double y;
}v[MAXN];
double g[MAXN][MAXN]={0};
int n;
double dlin (double x1 , double y1 , double x2 , double y2)
{
return sqrt ( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) ) ;
}
int main ()
{
//ios_base::sync_with_stdio(0);
freopen ("cowtour.in","r",stdin);
freopen ("cowtour.out","w",stdout);
int i,j;
char t;
cin>>n;
for (i=0;i<n;i++)
{
cin>>v[i].x>>v[i].y;
}
-------------------------------------------
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
cin>>t;
cout<<t<<" ";
if (t == '0')
{printf ("I ");
g[i][j] = INF;
printf ("%.6llf ",g[i][j]);
}
}
printf ( "\n");
}
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
cin>>t;
cout<<t<<" ";
if (t == '0')
{printf ("I ");
g[i][j] = INF;
printf ("%.6llf ",g[i][j]);
}
}
printf ( "\n");
}
---------------------------------------------
return 0;
}
Это часть решения задачи Cow tour на USACO TRAIN. На инпут даётся N и потом N координат (x,y), а потом даётся матрица смежности NхN (только 0 и 1). Чуть ниже приведён пример инпута . В той части кода , которую я отделил линиями у меня есть какой-то баг. Там идёт чтение матрицы из инпута. В t я беру каждый элемент матрицы поочерёдно и если он равняется нулю, то g[i][j] присваиваю INF, но почему-то у меня на компе присваивание идёт нормально , а на компиляторе юсако он вообще не присваивает! У них g[i][j] остаётся 0.000000 , но у меня он присваивает INF. Для проверки того , что заходит ли прога вообще в if, в котором я проверяю равенство t и 0 я сделал там printf ("I "); , вроде прога туда заходит , но она не присваивает . Кто нибудь скажите в чём проблема? Спасибо).
input
8
10 10
15 10
20 10
15 15
20 15
30 15
25 10
30 10
01000000
10111000
01001000
01001000
01110000
00000010
00000101
00000010
10 10
15 10
20 10
15 15
20 15
30 15
25 10
30 10
01000000
10111000
01001000
01001000
01110000
00000010
00000101
00000010
и юзая #define вместо объявления константы ты рискуешь напороться на неожиданные баги, также такая лажа не видна в дебагере, в отличие от константы.
#define MAXN 150 -> const int MAXN = 150;
#define INF = 1e6 -> const double INF = 1e6;
сменил t на t[MAXN] , а остальное на
for (i=0; i<n; i++)
{
cin>>t;
for (j=0; j<n; j++)
{
cout<<t[j]<<" ";
if (t[j] == '0')
{printf ("I ");
g[i][j] = INF;
printf ("%.6llf ",g[i][j]);
}
}
printf ("\n");
}
та же проблема
Блин, воспитание и самоуважение видно выше крыши, поэтому закономерный вопрос:
- Молодой человек, и не надоело Вам на всеобщее обозрение свой кактус выставлять?
UPD: Видать в школе firewall плохой стоит, коль такие кактусы в сети произрастают... :)
Попробуйте перед каждым вводом очищать буффер. В С++ бывает, что если сначала читаются целые или вещественные, а потом строковые или символьные, то ввод последних игнорируется. Туда пихается что- то из буфера.
Так перепишите ее под Паскаль. В олимпиадах так частенько поступают. Сбрось на почту мне полный код.