请教一道关于结构和排序的题(想用二维数组)
先po题目//呃。。。居然不能po图 还是我不会。。
[b]题目:[/b]
Description
时值情人节,青羽送了一个百宝箱给小衣,大小为n×m,每个格子里都有一件物品,物品价值为vi。现在需要你将这些格子按照价值从大到小排序。价值相同行号小的在前,行号再相同时,则列号在前的优先。
Input
第一行输入两个整数n,m表示百宝箱的大小。
接着输入n行m列的数据,分别表示对应格子里的物品的价值。
Output
按照要求排序后,每行输出一个行号、一个列号以及该行列号表示的格子里的物品价值。
Sample Input
3 5
19 5 12 15 4
16 7 14 5 19
19 10 1 17 2
Sample Output
1 1 19
2 5 19
3 1 19
3 4 17
2 1 16
1 4 15
2 3 14
1 3 12
3 2 10
2 2 7
1 2 5
2 4 5
1 5 4
3 5 2
3 3 1
HINT
输出时,格子的行列数与日常生活的计数习惯一致,即从1开始。
我写的程序:
#include<stdio.h>
struct Thing
{
int a,b,value; //构建结构体
};
int main()
{
int m,n;
Thing th[100][100],t;//定义一个 二维数组 去存放 某个物品,并且定义一个 暂存的空间;
scanf("%d %d",&n,&m);//读入行列
int i,j,p,q;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
scanf("%d",&th[i][j].value);//读入每个物体的价值
th[i][j].a=i+1;//赋值 行
th[i][j].b=j+1;//赋值 列
}
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
for(p=i;p<n;p++)
for(q=j;q<m;q++)
if(th[i][j].value<th[p][q].value || th[i][j].value==th[p][q].value && th[i][j].a>th[p][q].a ||
th[i][j].value==th[p][q].value && th[i][j].a==th[p][q].a && th[i][j].b>th[p][q].b)
{
t=th[i][j];th[i][j]=th[p][q];th[p][q]=th[i][j];//交换
}
}
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
printf("%d %d %d\n",th[i][j].a,th[i][j].b,th[i][j].value);//输出
}
return 0;
}
【在草纸上演算了几步 感觉算法对啊】
【c++上运行是ok的 但是出不来正确结果 一堆不明所以的东西】
【so...还是算法出错了吗?!】