Блог пользователя alligator

Автор alligator, 15 лет назад, По-русски
#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;
#define INF 100000.0
#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;
    }
 -------------------------------------------
    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
  • Проголосовать: нравится
  • -25
  • Проголосовать: не нравится

»
15 лет назад, скрыть # |
 
Проголосовать: нравится -8 Проголосовать: не нравится
читать char из потока достаточно странно. я хз что там может прочитаться, например конец строки или возврат коретки, пробел может быть тоже может прочитаться. (символы с 16-ричными кодами 0d, 0a, 20) все это приведёт к лаже. читай строку целиком for (i ....) { string ts; cin >> ts; for (j....) char t = ts[j]....
»
15 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится +2 Проголосовать: не нравится

Блин, воспитание и самоуважение видно выше крыши, поэтому закономерный вопрос:

- Молодой человек, и не надоело Вам на всеобщее обозрение свой кактус выставлять?

UPD: Видать в школе firewall плохой стоит, коль такие кактусы в сети произрастают... :)

»
15 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится -8 Проголосовать: не нравится

Попробуйте перед каждым вводом очищать буффер. В С++ бывает, что если сначала читаются целые или вещественные, а потом строковые или символьные, то ввод последних игнорируется. Туда пихается что- то из буфера.