这道题的题面
真的令人头大
而且说的不清楚
有很多坑点
首先,输入层神经元的阀值不需要减掉
其次,最后一层不能清掉信号强度
再就是,最后会有负数所以判断的是c是否>0
放在任务计划里挺久,上周才切掉
一道裸的拓扑排序吧
#include<cstdio> #define sev en using namespace std; #define N 110 int c[N],rd[N],cd[N],u[N]; int q[2000010],dis[N][N]; int main() { // printf("NULL"); // return 0; int n,m; scanf("%d%d",&n,&m); for(int i = 1; i <= n; i++) { // int u; scanf("%d%d",&c[i],&u[i]); if(!c[i]) c[i] -= u[i]; } for(int i = 1; i <= m; i++) { int from,to,w; scanf("%d%d",&from,&to); scanf("%d",&dis[from][to]); // dis[u][v] = w; rd[to]++; cd[from]++; } int h = 0,t = 1; for(int i = 1; i <= n; i++) if(rd[i] == 0) q[++t] = i; while(h < t) { h++; if(c[q[h]] > 0) { for(int i = 1; i <= n; i++) if(dis[q[h]][i] != 0) { c[i] += dis[q[h]][i] * c[q[h]]; q[++t] = i; } if(cd[q[h]] != 0) c[q[h]] = 0; } } bool f = 0; for(int i = 1; i <= n; i++) if(c[i] > 0) printf("%d %d\n",i,c[i]),f = 1; if(f == 0) printf("NULL"); return 0; }
(又水了一篇blog23333