Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:我觉得没错啊,怎么减少内存开销啊????In Reply To:我觉得没错啊,怎么减少内存开销啊???? Posted by:dexter at 2004-03-31 16:59:10 > #include<stdio.h> > #include<stdlib.h> > #define MAX 1000 > int matrix[MAX+1][MAX+1]; > int visited[MAX+1]; > int hasspf; > int vexnum; > int firstadjvex(int u) > { > int j; > for(j=1;j<=MAX;j++) > if(matrix[u][j]) > return j; > return -1; > } > int nextadjvex(int u,int w) > { > int j; > for(j=w+1;j<=MAX;j++) > if(matrix[u][j]) > return j; > return -1; > } > void DFS(int v) > { > int w; > visited[v]=1; > for(w=firstadjvex(v);w>=0;w=nextadjvex(v,w)) > if(!visited[w]) > DFS(w); > } > int findunvisited(int j) > { > int i; > for(i=1;i<=vexnum;i++) > if(!visited[i]&&i!=j) > return i; > return -1; > } > int is_spf(int j) > { > int temp[MAX+1]; > int i,num,w,v; > for(v=1;v<=vexnum;v++) > visited[v]=0; > for(i=1;i<=vexnum;i++) > { > temp[i]=matrix[j][i]; > matrix[j][i]=0; > } > num=0; > while((w=findunvisited(j))!=-1) > { > num++; > DFS(w); > } > for(i=1;i<=vexnum;i++) > matrix[j][i]=temp[i]; > return num; > } > > int init() > { > int from,to; > int i,j; > for(i=1;i<MAX;i++) > for(j=1;j<MAX;j++) > matrix[i][j]=0; > vexnum=0; > scanf("%d",&from); > if(from==0) > return 0; > while(from) > { > if(from>vexnum) > vexnum=from; > scanf("%d",&to); > if(to>vexnum) > vexnum=to; > matrix[from][to]=1; > matrix[to][from]=1; > scanf("%d",&from); > } > return 1; > } > main() > { > int i,j; > int nsnet; > j=i=0; > while(init()) > { > i++; > printf("Network #%d\n",i); > hasspf=0; > for(j=1;j<=vexnum;j++) > { > nsnet=is_spf(j); > if(nsnet>1) > { > printf(" SPF node %d leaves %d subnets\n",j,nsnet); > hasspf=1; > } > } > if(!hasspf) > printf(" No SPF nodes\n"); > } > } > > Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator