程序代码:
#include <stdio.h> int main( void ) { // 已知条件 const unsigned input[] = { 9,2,5, 6,8,4, 3,1,7 }; // 计算出每个数所在的下标 size_t rc[9] = { 0 }; for( size_t i=0; i!=9; ++i ) rc[ input[i]-1 ] = i; // 输出距离矩阵 for( size_t i=0; i!=81; ++i ) { size_t a = rc[i/9]; size_t b = rc[i%9]; size_t dis = (a/3 < b/3 ? b/3-a/3 : a/3 - b/3) + (a%3 < b%3 ? b%3-a%3 : a%3 - b%3); printf( "%zu%c", dis, " \n"[(i+1)%9==0] ); } }
假如你用的编译器比较烂(比如用的是TC、VC2013之前的编译器等),那么将
printf( "%zu%c", dis, " \n"[(i+1)%9==0] );
改为
printf( "%u%c", (unsigned)dis, " \n"[(i+1)%9==0] );