我发现一个很奇怪的事情 , 关于全局变量的 ,求指教
输入:3
0 990 692
990 0 179
692 179 0
1
1 2
看代码:
#include<stdio.h>
#include<algorithm>
using namespace std;
#define S 110
struct edge
{
int u , v , w ;
}e[S * S];
int p[S],n , m;//一开始,三个全局变量位置
void init ()//初始化而已
{
for(int i = 1 ; i <= S ; i++)
p[i] = i ;
}
bool cmp (edge a , edge b)
{
return a.w < b.w ;
}
int find (int x)
{
return x == p[x] ? x : p[x] = find(p[x]) ;
}
void kruskal ()
{
sort (e + 1 , e + m , cmp) ;
int ans = 0 , x , y ;
for (int i = 1 ; i < m ; i++) {
x = find (e[i].u) ;
y = find (e[i].v) ;
if (x != y) {
ans += e[i].w ;
p[x] = y ;
}
}
printf ("%d\n" , ans) ;
}
int main ()
{
freopen ("a.txt" , "r" ,stdin) ;
int k , built ;
int x , y ;
while (~ scanf ("%d" , &n ) ) {
printf ("n=%d\n" , n ) ;//第一次输出n
init () ;
m = 1 ;
printf ("n = %d\n" ,n) ;//第二次输出n
return 0 ;
for (int i = 1 ; i <= n ; i++) {
for (int j = 1 ; j <= n ; j++) {
if (j <= i) {
scanf ("%d" , &k ) ;
continue ;
}
scanf ("%d" , &e[m].w) ;
e[m].u = i ;
e[m].v = j ;
printf ("%d:u=%d v=%d w=%d\n" , e[m].u , e[m].v , e[m].w ) ;
m++ ;
}
}
// return 0;
scanf ("%d" , &built );
for (int i = 0 ; i < built ; i++) {
scanf ("%d%d" , &x , &y ) ;
x = find (x) ;
y = find (y) ;
p[x] = y ;
}
kruskal () ;
}
return 0 ;
}
输出(仅是n的部分):
n=3
n = 110
可以看到进行init()操作后,n的值变了 ,为啥?而且貌似变成的是 S 的值
但如果把声明全局量时的顺序变成:int n , p[S] , m;
输出就成了:
n=3
n = 3
能帮我解释下吗 = i =