簡體   English   中英

收到警告:'在 function 'void dfs(int)' 警告:有符號和無符號 integer 表達式之間的比較'

[英]Getting the warning: ' In function ‘void dfs(int)’ Warning: comparison between signed and unsigned integer expressions'

我正在研究一個簡單的 DFS 問題,我必須返回與其父節點相比具有更多子節點的相應子節點的數量(子節點>父節點:Count++)。

我一直面臨標題中提到的問題,但我無法解決它。 我也使用了 unsigned int ,但無濟於事。 我對這個問題的邏輯很清楚,但對編碼來說相當陌生,因此面臨諸如此類錯誤的困難。 我將只在下面附上我的 DFS function,問題似乎正在發生。 請幫我解決一下這個。 (使用鄰接表)

vector<int> adj[100001];
bool visited[100001]={false};
int parent=0;
int child=INT_MAX;
int counterr=0;

/*Recursive DFS:*/

void dfs(int s){
    child=adj[s].size()-1;
    if(child>parent)
        counterr++;
    if(s==1)
        parent=adj[s].size();
    else
        parent=adj[s].size()-1;
    visited[s]=true;
    for(int i=0;i<adj[s].size();i++)
    {
        if(visited[adj[s][i]==false])
            dfs(adj[s][i]);
    }
}

在大多數情況下,您可以忽略這一點。 但是,如果您的 integer 超過正常的 integer 限制,或者您的 adj[s] 向量為空,這可能會成為問題。 如果父母從不消極,你可以改變這條線

int parent;

unsigned int parent;

這將完全阻止此警告。

for(int i=0;i<adj[s].size();i++)

您收到此警告是因為adj[s].size()未簽名 integer,但i已簽名。

要修復該警告,請改用此警告,然后i變得未簽名。

for (size_t i=0; i < adj[s].size(); i++)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM