1038神經網路

2021-08-18 04:36:04 字數 1392 閱讀 1308

這道題也可以用佇列來做,但比較麻煩。。。。沒辦法,蒟蒻一枚。

首先,將起點(ci==1的點)放入佇列之中。當head< tail時,

++head,將隊首的點(team【head】)展開去找他的兒子節點。

如果兒子節點沒放入佇列則放入。l代表本層最後乙個點在team【】中的序號,l2用於記錄修改前的l,便於輸出。當head==l時,則這一層的節點掃瞄畢。此時l+1到tail間的節點即是下一層的節點。對下一層的節點施行減ui【】操作,如果減完後的ci【】大於0,則這個節點處於興奮狀態,可以向下傳遞。若不能,則用ex【】(因為exst【】已經用來記錄別的了。。。)打個標記阻止繼續下傳。迴圈完成後,l2+1到l(也就是tail)之間的便是解(注意只用輸出大於0的,所以輸出時加乙個判定),至於co【】,只是為了按順序輸出用的。

解釋寫得夠詳細得了吧。。。

**如下:

#include

#include

#include

#include

#include

#include

using

namespace

std;

int n,p,ta,ci[1000001],ui[1000001];

int head,l2,tail,team[1000001],exist[100010];

int ex[1000001],co[1000001],lx;

struct

ace[100001*4];

void

build

(int x,int y,int z)

//建圖。

bool

cmp(int a,int b)

for(int i=1;i<=p;++i)

for(int i=1;i<=n;++i)

}//起點入隊。 int l=tail;//此時l為第一層最後乙個節點在team【】中的序號。

while(headif(head==l)//當某一層迴圈完畢時,執行減ui【】操作。

}l2=l;

l=tail;//更新l,l2.

}head++; int u=team[head];

if(ex[u]!=1)//如果節點興奮,則修改他的子節點。}}

}for(int i=l2+1;i<=tail;++i)

sort(co+1,co+1+lx,cmp);//從下到大輸出。

if((ci[co[lx]]==0&&ci[co[1]]==0)||tailcout

<<"null";//如果首尾都是0(因為sort過了,所以如果首尾都是0則全是0)或未遍歷到輸出層,則輸出null。

}else

}return

0;}

luogu1038神經網路

題目背景 人工神經網路 artificial neural network 是一種新興的具有自我學習能力的計算系統,在模式識別 函式逼近及貸款風險評估等諸多領域有廣泛的應用。對神經網路的研究一直是當今的熱門方向,蘭蘭同學在自學了一本神經網路的入門書籍後,提出了乙個簡化模型,他希望你能幫助他用程式檢驗...

洛谷1038 神經網路

原題位址 語死早 語體教系列 捋了好幾遍都沒看懂題幹在說啥,試著寫了寫,一提交果然有bug 最後還是看著題解改了個bug才過,倍受打擊 廣搜 解題思路 簡單的廣搜,用鄰接表存圖,入度為0的 或者c i 0的 點是輸入層,先放到佇列裡,c i 0的不是輸入層,要預處理一下,把c i 換成c i u i...

luogu1038 神經網路

人工神經網路 artificial neural network 是一種新興的具有自我學習能力的計算系統,在模式識別 函式逼近及貸款風險評估等諸多領域有廣泛的應用。對神經網路的研究一直是當今的熱門方向,蘭蘭同學在自學了一本神經網路的入門書籍後,提出了乙個簡化模型,他希望你能幫助他用程式檢驗這個神經網...