就是在C语言中定义一个int G[1000][1000]的数组
如果定义在main函数里(函数的后面还有个scanf语句)
结果一运行程序,控制台直接自动结束程序,根本没有获取我的输入
然而我将该数组定义在main函数的外面,执行程序的时候则会正常的进行
问同学说是stackoverflow?求详细的解释
你好,我在我机子上试了没有你所说的情况。ps:while(~scanf("%d%d",&n,&m)) 是不是写错了。。。,为啥要按位取反
你能将你代码贴出来么?我认为不会是stackoverflow,应该是其他问题
#include <iostream>
#include <cstdio>
#include <cstring>
#define INF 65535
using namespace std;
int G[1007][1007];
int main()
{
int flag;
int n,m;
int x,y,weight;
int min,v;
int d[1007];
int s[1007];
int ans;
while(~scanf("%d%d",&n,&m))
{
if(n == 0) break;
flag = 0;
ans = 0;
memset(s,0,sizeof(s));
//初始化图
for(int i = 1;i <= m;i++)
for(int j = 1;j <= m;j++)
G[i][j] = i == j?0:INF;
//输入每个边的权值
for(int i = 0;i < n;i++)
{
scanf("%d%d%d",&x,&y,&weight);
if(weight < G[x][y])
G[x][y] = weight;
}
//初始化每个点到的1初始距离
for(int i = 1;i <= m;i++)
d[i] = G[1][i];
s[1] = 1;
//for循环n-1次->依次选出n-1个点进入s集合
for(int i = 1;i <= m-1;i++)
{
min = INF;
for(int j = 1;j <= m;j++)
if(!s[j] && d[j] < min)
min = d[v = j];
if(min == INF) {
flag = 1;
break;
}
s[v] = 1;ans += d[v];
for(int k = 1;k <= m;k++)
if(!s[k] && d[k] > G[v][k])
d[k] = G[v][k];
}
if(flag) printf("?\n");
else printf("%d\n",ans);
}
return 0;
}