是的
2015-06-04 21:43
344 查看
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAX 100
using namespace std;
int map[MAX][MAX];//输入的矩阵
int convert[MAX][MAX];//变换后的矩阵
int mark[MAX][MAX];//标记变换位置
int sum;//记录变换总位置数
int n;//n 乘 n矩阵
void getmap()
{
printf("输入邻接矩阵:\n");
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
scanf("%d", &map[i][j]);
convert[i][j] = map[i][j];
mark[i][j] = 0;
}
}
sum = 0;
printf("\n");
}
void warshall()
{
int k, i, j;
for(k = 1; k <= n; k++)//对当前行的每一个元素
{
for(i = 1; i <= n; i++)//遍历
{
for(j = 1; j <= n; j++)//遍历每一行
{
convert[i][j] = (convert[i][j] || convert[i][k]&convert[k][j]);
}
}
}
printf("变换后邻接矩阵:\n");
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
{
if(j > 1) printf(" ");
printf("%d", convert[i][j]);
if(convert[i][j] != map[i][j])
sum++, mark[i][j] = 1;
}
printf("\n");
}
printf("\n");
printf("变换数有%d个\n", sum);
if(sum)
printf("变换位置如下:\n");
else
return ;
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
{
if(mark[i][j])
printf("位置(%d, %d)由%d -> %d\n", i, j, map[i][j], convert[i][j]);
}
}
printf("\n");
}
int main()
{
while(printf("顶点个数: "), scanf("%d", &n), n)
{
getmap();
warshall();
}
return 0;
}
#include <cstring>
#include <algorithm>
#define MAX 100
using namespace std;
int map[MAX][MAX];//输入的矩阵
int convert[MAX][MAX];//变换后的矩阵
int mark[MAX][MAX];//标记变换位置
int sum;//记录变换总位置数
int n;//n 乘 n矩阵
void getmap()
{
printf("输入邻接矩阵:\n");
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= n; j++)
{
scanf("%d", &map[i][j]);
convert[i][j] = map[i][j];
mark[i][j] = 0;
}
}
sum = 0;
printf("\n");
}
void warshall()
{
int k, i, j;
for(k = 1; k <= n; k++)//对当前行的每一个元素
{
for(i = 1; i <= n; i++)//遍历
{
for(j = 1; j <= n; j++)//遍历每一行
{
convert[i][j] = (convert[i][j] || convert[i][k]&convert[k][j]);
}
}
}
printf("变换后邻接矩阵:\n");
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
{
if(j > 1) printf(" ");
printf("%d", convert[i][j]);
if(convert[i][j] != map[i][j])
sum++, mark[i][j] = 1;
}
printf("\n");
}
printf("\n");
printf("变换数有%d个\n", sum);
if(sum)
printf("变换位置如下:\n");
else
return ;
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
{
if(mark[i][j])
printf("位置(%d, %d)由%d -> %d\n", i, j, map[i][j], convert[i][j]);
}
}
printf("\n");
}
int main()
{
while(printf("顶点个数: "), scanf("%d", &n), n)
{
getmap();
warshall();
}
return 0;
}
相关文章推荐
- 《C++ primer》第五版 第三章 笔记
- Java SWT事件
- 4.19&&4.20
- 使用nTopng
- 实现医技工作站的X光检查功能的代码(十七)
- DiskLruCache
- BZOJ 1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富( dp )
- STL之deque
- MySQL日期时间函数大全
- c#自动更新+安装程序的制作
- hdu 2899 二分
- 矩形面积并 (hdu1542)
- Eclipse配置PyDev插件
- P122.43
- Java程序设计 实验三
- 没有不留痕迹的事
- hidden_frame实现不刷新上传文件
- glusterfs复制卷的创建以及glusterfs的常用命令
- 多条命令中的逻辑运算符和括号 “||” “&&” () Linux
- js中date与String转换