2016-10-27 3 views
-1
vector<int> G[MAXN] ; 

char isLeaf[MAXN] ; 

int n,path; 

for(int i = 0;i < n;i++) path -= isLeaf[i] = G[i].size() == 1 ; 

// Как работает код в цикле For? Здесь я смущен несколькими операторами.Несколько операторов в одной строке

+0

@BenVoigt ' G' - массив «векторов». –

+0

@ GillBates: Да, только что заметил, меня отвлекло плохое форматирование. –

+2

Прочтите и изучите * приоритет оператора *. Кроме того, оператор присваивания возвращает значение. Оператор '==' вернет значение «true» или «false», которое может быть преобразовано в целочисленную константу (0 для false, non-zero для true). Злой код. Не копировать. Бросьте мусор и перепишите. –

ответ

2

Благодаря operator precedence and associativity, заявление

path -= isLeaf[i] = G[i].size() == 1 ; 

эквивалентно:

path -= (isLeaf[i] = (G[i].size() == 1)); 

Если разделить его на несколько заявлений для ясности, вы получите:

bool temp = (G[i].size() == 1); 
isLeaf[i] = temp; 
path -= isLeaf[i]; 
+1

спасибо, это сработало :) –