1,定义时,如果用0x3f3f3f3f 下面对map赋值时可以用memset(map,data,sizeof(map)),如果定义成了100000000,则下面赋值应该用循环赋值
#include<stdio.h>
#include<string.h>
#define data 0x3f3f3f3f
int map[105][105];
int n,m;
int floyd(int x,int y)
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if (map[i][j] > map[i][k]+map[k][j])
map[i][j] =map[i][k]+map[k][j];
return map[x][y];
}
int main()
{
int a,b,c;
while(scanf("%d%d",&n,&m)&&n!=0&&m!=0)
{
memset(map,data,sizeof(map));
/*for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
map[i][j]=100000000;*/
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(map[a][b]>c) map[a][b]=map[b][a]=c;
}
printf("%d\n",floyd(1,n));
}
return 0;
}
2
#include<stdio.h>
#include<string.h>
#define data 100000000
int map[105][105];
int n,m;
int floyd(int x,int y)
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if (map[i][j] > map[i][k]+map[k][j])
map[i][j] =map[i][k]+map[k][j];
return map[x][y];
}
int main()
{
int a,b,c;
while(scanf("%d%d",&n,&m)&&n!=0&&m!=0)
{
//memset(map,data,sizeof(map));
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
map[i][j]=data;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(map[a][b]>c) map[a][b]=map[b][a]=c;
}
printf("%d\n",floyd(1,n));
}
return 0;
}
如下demo是可以的,能把数组中的元素值都设置成字符1,
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char a[5];
memset(a,'1',5);
for(int i = 0;i < 5;i++)
cout<<a[i]<<" ";
system("pause");
return 0;
}
而,如下程序想吧数组中的元素值设置成1,却是不可行的
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int a[5];
memset(a,1,5);//这里改成memset(a,1,5 *sizeof(int))也是不可以的
for(int i = 0;i < 5;i++)
cout<<a[i]<<" ";
system("pause");
return 0;
}
问题是:
1,第一个程序为什么可以,而第二个不行,
2,不想要用for,或是while循环来初始化int a[5];能做到吗?(有没有一个像memset()这样的函数初始化)
答:
1.因为第一个程序的数组a是字符型的,字符型占据内存大小是1Byte,而memset函数也是以字节为单位进行赋值的,所以你输出没有问题。而第二个程序a是整型的,使用memset还是按字节赋值,这样赋值完以后,每个数组元素的值实际上是0x01010101即十进制的16843009。你看看你输出结果是否这样?
2.如果用memset(a,1,20);
就是对a指向的内存的20个字节进行赋值,每个都用ASCII为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是1000000010000000100000001,就等于16843009,就完成了对一个INT元素的赋值了