《孙子兵法》第四篇为《虚实篇》,主要探讨如何通过“虚实”变化掌握战场主动权,灵活应对敌人。核心思想是“避实击虚”,强调根据敌我态势的变动,创造有利条件,以最小代价取得胜利。
原文
孙子曰:凡先处战地而待敌者佚,后处战地而趋战者劳。故善战者,致人而不致于人。能使敌人自至者,利之也;能使敌人不得至者,害之也。故敌佚能劳之,饱能饥之,安能动之。
出其所不趋,趋其所不意。行千里而不劳者,行于无人之地也。攻而必取者,攻其所不守也;守而必固者,守其所不攻也。故善攻者,敌不知其所守;善守者,敌不知其所攻。微乎微乎,至于无形;神乎神乎,至于无声,故能为敌之司命。
进而不可御者,冲其虚也;退而不可追者,速而不可及也。故我欲战,敌虽高垒深沟,不得不与我战者,攻其所必救也;我不欲战,画地而守之,敌不得与我战者,乖其所之也。
故形人而我无形,则我专而敌分。我专为一,敌分为十,是以十攻其一也,则我众而敌寡;能以众击寡者,则吾之所与战者,约矣。吾所与战之地不可知,不可知,则敌所备者多;敌所备者多,则吾所与战者,寡矣。
故备前则后寡,备后则前寡,备左则右寡,备右则左寡,无所不备,则无所不寡。寡者,备人者也;众者,使人备己者也。
故知战之地,知战之日,则可千里而会战。不知战地,不知战日,则左不能救右,右不能救左,前不能救后,后不能救前,而况远者数十里,近者数里乎?
以吾度之,越人之兵虽多,亦奚益于胜败哉?故曰:胜可为也。敌虽众,可使无斗。
故策之而知得失之计,作之而知动静之理,形之而知死生之地,角之而知有余不足之处。故形兵之极,至于无形。无形,则深间不能窥,智者不能谋。因形而错胜于众,众不能知;人皆知我所以胜之形,而莫知吾所以制胜之形。故其战胜不复,而应形于无穷。
夫兵形象水,水之形,避高而趋下,兵之形,避实而击虚。水因地而制流,兵因敌而制胜。故兵无常势,水无常形,能因敌变化而取胜者,谓之神。
故五行无常胜,四时无常位,日有短长,月有死生。
译文
孙子说:凡先到战地而等待敌人的就从容、主动,后到战地而仓促应战的就疲劳、被动。所以,善于指挥作战的人,能调动敌人而不被敌人所调动。
能使敌人自己来上钩的,是以小利引诱的结果;能使敌人不能到达其预定地域的,是以各种方法阻碍的结果。所以,敌人休整得好,能设法使它疲劳;敌人给养充分,能设法使它饥饿;敌军驻扎安稳,能够使它移动。
出兵要指向敌人无法救援的地方,行动要在敌人意料不到的方向。行军千里而不疲困的,是因为行进在没有敌人及其没有设防的地区。进攻必然得手的,是因为攻击敌人不注意防守或不易守往的地方;防守必然巩固的,是因为扼守敌人不敢攻或不易攻破的地方。
所以,善于进攻的,能使敌人不知怎样防守;善于防御的,敌人不知道怎样进攻。微妙呀!微妙到看不出一点形迹;神奇呀!神奇到听不出一点声息。这样,就能主宰敌人的命运。
前进时,敌人无法抵御的,是因为冲击敌人空虚的地方;退却时,敌人无法追及的,是因为退得迅速使敌人追赶不上。所以,我若求战,敌人即使坚守深沟高垒,也不得不出来与我交战,是由于进攻敌人所必救的地方;我若不想交战,即使画地而守,敌人也无法和我交战,是因为我设法改变了敌人的进攻方向。
所以,用示形的办法欺骗敌人,诱使其暴露企图,而自己不露形迹,使敌人捉摸不定,就能够做到自己兵力集中而使敌人兵力分散。我军兵力集中于一处,敌人兵力分散于十处,我就能以十倍于敌的兵力打击敌人,造成我众而敌寡的有利态势;能做到以众击寡,那么与我军直接交战的敌人就少了。我们所要进攻的地方使敌人不知道;不知道,它就要处处防备;敌人防备的地方越多,兵力越分散,这样,我所直接攻击的敌人就不多了。
所以,注意防备前面,后面的兵力就薄弱;注意防备后面,前面的兵力就薄弱;注意防备左翼,右翼的兵力就薄弱;注意防备右翼,左翼的兵力就薄弱;处处防备,就处处兵力薄弱。敌人兵力所以少,是由于处处防备的结果;我方兵力所以多,是由于迫使敌人分兵防我的结果。
能预料同敌交战的地点,能预料同敌人交战的时间,就是跋涉千里也可同敌人交战。如果既不能预料交战的地点,又不能预料交战的日期,就会左不能救右,右不能救左,前不能救后,后不能救前,何况远到几十里,近的也有好几里呢!
依我分析,越国的兵虽多,对于决定战争的胜败又有什么补益呢?所以说,胜利是可以争取到的。敌军虽多,也可以使具无法用全部力量与我交战。
所以要认真分析判断,以求明了敌人作战计划的优劣长短;挑动敌人,以求了解其行动的规律;示形诱敌,以求摸清其所处地形的有利与不利;进行战斗侦察,以求探明敌人兵力部署的虚实强弱。
所以,示形诱敌的方法运用到极妙的程度,能使人们看不出一点形迹,看不出一点形迹,即使有深藏的间谍,也无法探明我方的虚实,即使很高明的敌人,也想不出对付我的办法来。根据敌情而取胜,把胜利摆在众人面前,众人还是看不出来。人们只知道我是根据敌情变化取胜的,但是不知道我是怎样根据敌情变化取胜的。所以每次战胜,都不是重复老一套的方法,而是适应不同的情况,变化无穷。
用兵的规律像水,水流动的规律是避开高处而向低处奔流,用兵的规律是避开敌人坚实之处而攻击其虚弱的地方。水因地势的高下而制约其流向,作战则根据敌情而决定取胜的方针。所以,作战没有固定不变的方式方法,就像水流没有固定的形态一样;能依据敌情变化而取胜的,就称得上用兵如神了。
用兵的规律就像自然现象一样,“五行” 相生相克,四季依次交替,白天有短有长,月亮有缺有圆,永远处于变化之中。
核心思想
-
避实击虚:
-
这是《虚实篇》的核心战略思想。在战争中,要善于发现敌人的弱点,并集中力量攻击这些弱点,而不是试图解决所有问题。
-
通过种种办法调动敌人,造成我强敌弱、我实敌虚的态势,集中兵力打击敌人,以获得战争的胜利。
-
-
兵无常势,水无常形:
-
作战没有固定的打法,就像流水没有固定的形状一样。要根据敌情的变化而灵活调整战略和战术。
-
强调了在战争中要根据具体情况灵活运用策略的重要性。
-
-
致人而不致于人:
-
善于运用策略调动敌人,使其按照我方的意愿行动,而不被敌人所牵制。
-
这体现了对战争主动权的掌握和追求。
-
现实意义
-
商业竞争:通过差异化策略(避实),聚焦对手忽视的市场(击虚)。
-
个人决策:集中资源攻克关键问题,避免分散精力。
-
谈判技巧:隐藏真实需求,引导对方暴露底线。
①虚实
- 释义:虚和实,泛指实际情况或内部情况。在兵法中,虚通常指敌人的弱点或空虚之处,实则指敌人的强大或防守严密之处。
- 应用:通过分析和判断敌人的虚实,可以制定出相应的战略和战术,以实击虚,取得胜利。
②致人而不致于人
- 释义:调动敌人而不被敌人调动。
- 应用:在战争中,要设法调动敌人,使其按照我们的意愿行动,而不是被敌人牵着鼻子走。这需要我们掌握战争的主动权,通过灵活多变的战术来调动敌人。
③出其所不趋,趋其所不意
- 释义:出兵要朝向敌人无法救援的地方,行军于敌人意料不到的方向。
- 应用:在战争中,要选择敌人无法预料或无法及时救援的时机和地点进行攻击,以达到出奇制胜的效果。
④形人而我无形
- 释义:使敌情暴露而我情不露痕迹。
- 应用:通过伪装和示形等手段,使敌人暴露其真实意图和兵力部署,而我方则保持隐蔽和灵活,以便根据敌人的情况制定出相应的战略和战术。
⑤因形而措胜于众
- 释义:根据敌情的变化而取胜,即使把胜利摆在众人面前,众人还是看不出其中的奥妙。
- 应用:在战争中,要善于根据敌人的变化而灵活调整战术和策略,以取得胜利。同时,还要保持战术和策略的隐蔽性,使敌人无法窥破我们的真实意图。
⑥佚(yì)
- 释义:安逸、从容。在兵法中,通常指先占据战场迎击敌人的状态。
⑦劳
- 释义:疲劳、被动。在兵法中,通常指后到达战场仓促应战的状态。
⑧司命
- 释义:主宰、掌控。在兵法中,指能够掌控敌人的命运,即能够决定战争的胜负。
⑨乖其所之
- 释义:调动敌人,将敌人引向它处。在兵法中,指通过战术手段改变敌人的进攻方向,使其无法攻击我们的要害。
⑩微乎微乎,至于无形;神乎神乎,至于无声
- 释义:微妙到看不出一点形迹,神奇到听不出一点声音。在兵法中,形容战术和策略的高超和隐蔽性。
⑩兵无常势,水无常形
- 释义:用兵作战没有固定的态势,就像水流没有不变的形态。在兵法中,强调要根据敌人的情况灵活调整战术和策略,以适应战争的变化。
代码模拟
以下是一个简化的C语言代码示例,它试图模拟《虚实篇》中“致人而不致于人”(掌握战争主动权)和“避实击虚”(攻击敌人弱点)的思想。在这个示例中,我们假设有两个“军队”(用数组表示),每个军队有固定的“兵力”(数组元素的值),并且我们试图通过策略性地选择攻击目标来模拟“致人而不致于人”和“避实击虚”的原则。
#include <stdio.h>
#define MAX_SOLDIERS 100 // 假设每个军队最多有100名士兵
#define NUM_ARMIES 2 // 假设有两个军队
// 初始化军队兵力
void initializeArmies(int armies[NUM_ARMIES][MAX_SOLDIERS], int numSoldiers[NUM_ARMIES]) {
for (int i = 0; i < NUM_ARMIES; i++) {
for (int j = 0; j < numSoldiers[i]; j++) {
armies[i][j] = 1; // 假设每个士兵的战斗力为1
}
// 剩余位置填充为0,表示没有士兵
for (int j = numSoldiers[i]; j < MAX_SOLDIERS; j++) {
armies[i][j] = 0;
}
}
}
// 计算军队的总兵力
int calculateTotalSoldiers(int army[MAX_SOLDIERS], int numSoldiers) {
int total = 0;
for (int i = 0; i < numSoldiers; i++) {
total += army[i];
}
return total;
}
// 模拟攻击,选择兵力最少的军队进行攻击(避实击虚)
void simulateAttack(int armies[NUM_ARMIES][MAX_SOLDIERS], int numSoldiers[NUM_ARMIES]) {
int weakestArmyIndex = 0;
int minSoldiers = numSoldiers[0];
// 找到兵力最少的军队
for (int i = 1; i < NUM_ARMIES; i++) {
if (numSoldiers[i] < minSoldiers) {
weakestArmyIndex = i;
minSoldiers = numSoldiers[i];
}
}
// 假设攻击后,被攻击的军队兵力减半(模拟损失)
for (int i = 0; i < numSoldiers[weakestArmyIndex]; i++) {
armies[weakestArmyIndex][i] = 0; // 简化为完全损失,实际可以设置为部分损失
}
numSoldiers[weakestArmyIndex] /= 2; // 简化处理,实际可以根据战斗情况调整
// 更新剩余兵力
for (int i = 0; i < NUM_ARMIES; i++) {
// 重新计算剩余兵力(因为可能有完全损失的士兵)
int newNumSoldiers = 0;
for (int j = 0; j < MAX_SOLDIERS; j++) {
if (armies[i][j] == 1) {
newNumSoldiers++;
}
}
numSoldiers[i] = newNumSoldiers;
}
}
int main() {
int armies[NUM_ARMIES][MAX_SOLDIERS];
int numSoldiers[NUM_ARMIES] = {50, 30}; // 假设军队1有50名士兵,军队2有30名士兵
initializeArmies(armies, numSoldiers);
printf("Initial armies:\n");
for (int i = 0; i < NUM_ARMIES; i++) {
printf("Army %d has %d soldiers.\n", i + 1, calculateTotalSoldiers(armies[i], numSoldiers[i]));
}
simulateAttack(armies, numSoldiers);
printf("\nArmies after attack:\n");
for (int i = 0; i < NUM_ARMIES; i++) {
printf("Army %d has %d soldiers left.\n", i + 1, calculateTotalSoldiers(armies[i], numSoldiers[i]));
}
return 0;
}