THUẬT TOÁN BELMAN FORD
#include<stdio.h>
#define IFNIT 9999 typedef struct{ int n; int L[500][500]; }Graph; void init_graph(Graph *G, int n){ G->n=n; int i,j; for(i=1;i<=G->n;i++) for(j=1;j<=G->n;j++) G->L[i][j]=0; } void add_graph(Graph *G, int x, int y, int w){ G->L[x][y]=w; } int mark[100]; int pi[100]; int p[100]; void Khoitao(Graph *G, int mark[], int pi[]){ int i; for(i=1;i<=G->n;i++){ pi[i]=IFNIT; mark[i]=0; } } void dijkstra(Graph *G, int s){ // doi ten thanh bellmen_ford int i,j,k; pi[s]=0; p[s]=-1; for(i=1;i<=G->n;i++){ int min_pi=IFNIT; for(j=1;j<=G->n;j++){ if(mark[j]==0 && pi[j]<min_pi){ min_pi=pi[j]; k=j; } } mark[k]=1; for(j=1;j<=G->n;j++){ if(G->L[k][j]!=0 && mark[j]==0){ if(pi[k]+G->L[k][j] <pi[j]){ pi[j]=pi[k]+G->L[k][j]; p[j]=k; } } } } } int main(){ Graph G; int n,i,m,w; int u,v; freopen("dt.txt","r",stdin); scanf("%d%d",&n,&m); init_graph(&G,n); for(i=1;i<=m;i++){ scanf("%d%d%d",&u,&v,&w); add_graph(&G,u,v,w); } int x; int dem=0; scanf("%d",&x); Khoitao(&G,mark,pi); dijkstra(&G,x); for(i=1;i<=G.n;i++){ if(pi[i]<0) dem++; } if(dem>0) printf("YES"); else printf("NO"); return 0; }